epoll和发送滞后

时间:2013-04-01 11:51:53

标签: c linux sockets epoll

我正在使用Linux 64位Linux scv 3.2.0-39-generic #62-Ubuntu SMP Thu Feb 28 00:28:53 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux,并且使用在同一物理主机上运行的套接字有两个进程。

一个进程( A )在TCP / IP套接字上发送(如果主机是相同的,则是本地套接字)以下数据:

  1. 276个字节
  2. 16个字节
  3. 在0.000023秒内完成此过程 A 。发送的数据是send套接字API的2倍。

    另一个进程( B )使用epoll_wait(efd, events, 10, 5)通过 epoll 接收数据。收到的数据如下(时间采用clock_gettime(CLOCK_REALTIME, &cur_ts);,重要的是相对差异):

    1. 从套接字缓冲区中读取数据8051.177743(276)
    2. 再次致电epoll 8051.177763
    3. 从套接字缓冲区8051.216250(16)
    4. 中读取数据

      使接收过程滞后为0.038507秒。基本上,如果发送过程 A 小于 ms ,则在接收端 epoll 接收数据会增加大约0.038秒的额外延迟

      这是预期的吗?我做错了什么?
      或者我该如何改善这种情况?

      由于

1 个答案:

答案 0 :(得分:0)

  

这是预期的吗? ...

是。我希望如此。原因如下:

  

我做错了什么? ...

epoll旨在用于需要监视大量文件描述符的情况。这就是它的适用范围,在我看来,你为使用它的情况不是那种情况。

  

......我怎样才能改善这种状况?

如果您想提高效果,使用适合工作的工具。不要将epoll用于单个插槽。只需使用普通的香草回收。如果您正在处理两个或三个套接字,请考虑使用poll或select。如果您冒险尝试数百种,那么您可能需要考虑使用epoll或kqueue。