假设我有一个多线程程序,其中 2 个线程中的每一个:
- 在默认(阻塞)模式下有自己的套接字
socket_fd
- 使用
write(socket_fd, data, data_len)
反复发送数据,导致网络成为瓶颈 - 传递给
write
的数据大小(即data_len
)总是等于 MSS;为简单起见,假设data_len = 500
我想知道在假设单个网络接口(interface)卡的情况下写入的公平性,即:如果线程 2 调用写入的频率降低 9 倍,线程 2 发送的数据是否大致为 1/(1 + 9)
在合理时间内发送的总数据(即线程 2 最终将发送其数据,即使线程 1 通过不断发送过量数据使底层媒体非常忙碌) )?
我主要对线程 1(发送更多数据)使用 TCP 而线程 2 使用 DCCP 的情况感兴趣。尽管如此,也欢迎回答线程 2 使用 UDP 和 TCP 的场景。
最佳答案
这取决于 queuing discipline它在网络接口(interface)上调度传出数据包。默认 pfifo_fast, the default Linux qdisc将传出数据包组织到由 ToS 字段索引的 fifo 队列中。具有相同 ToS 的传出数据包按照内核从应用程序接收数据包的顺序发送。
关于linux - 2个并行连接中socket write()的公平性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20304610/