EPOLL和传入流的饥饿

时间:2015-10-21 20:50:01

标签: linux curl pthreads epoll

我有一个项目,我正在从正常的select()转换,但由于我运行的测试超过1000个连接,我决定将其更改为epoll。

我的代码正常运行,但遇到了一个我正在努力解决的问题,这是最好的解决方法。

系统有一个libcurl线程从外部源提取数据,它被缓存在内存中,等待连接和连接数据。

当源数据完成时,一切都很顺利,但是当我下载新数据时有人连接并且它们足够快以赶上libcurl线程时,它们会陷入饥饿状态。

我的问题是如何在不设置EPOLLOUT的情况下重启拉拔器并让epoll_wait不断告诉我缓冲区中有空间。

我的选择是

  1. EPOLLOUT,会导致很多epoll_waits告诉我缓冲区是空的,直到有一些数据可用。

  2. 计时器,我如何决定延迟

  3. 有一个连接列表,当有新数据从libcurl线程发送数据时,我不想这样做。

  4. 从libcurl线程到epoll循环的某种信号,怎么样?

  5. 任何其他想法

1 个答案:

答案 0 :(得分:0)

您可以使用eventfd()文件描述符来允许下载线程在更多数据到达时唤醒epolling线程。

不清楚为什么你不必在select()实施中解决同样的问题。