套接字write()在2个并行连接中的公平性?

时间:2013-11-30 19:22:36

标签: linux multithreading sockets io network-protocols

假设我有一个多线程程序,其中包含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的场景的答案也是受欢迎的。

1 个答案:

答案 0 :(得分:2)

它取决于调度网络接口上的传出数据包的queuing discipline。默认pfifo_fast, the default Linux qdisc将传出数据包组织到由ToS字段索引的fifo队列中。具有相同ToS的传出数据包按内核从应用程序接收数据包的顺序发送。