假设我有一个多线程程序,其中包含2个线程中的每一个:
socket_fd
write(socket_fd, data, data_len)
重复发送数据,使网络成为瓶颈write
的数据大小(即data_len
)始终等于MSS;为简单起见,假设为data_len = 500
我想知道假设单个网络接口卡的写入的公平性,即:如果线程2调用写入频率低9倍,是否有一个弱保证线程2发送的数据大致为1/(1 + 9)
在合理时间内发送的总数据(即,即使线程1通过不断发送过多的数据来保持底层媒体非常繁忙,线程2最终也会发送其数据)?
我主要感兴趣的是线程1(发送更多数据)使用TCP而线程2使用DCCP。尽管如此,对于线程2使用UDP和TCP的场景的答案也是受欢迎的。
答案 0 :(得分:2)
它取决于调度网络接口上的传出数据包的queuing discipline。默认pfifo_fast, the default Linux qdisc将传出数据包组织到由ToS字段索引的fifo队列中。具有相同ToS的传出数据包按内核从应用程序接收数据包的顺序发送。