我有一个项目,我正在从正常的select()转换,但由于我运行的测试超过1000个连接,我决定将其更改为epoll。
我的代码正常运行,但遇到了一个我正在努力解决的问题,这是最好的解决方法。
系统有一个libcurl线程从外部源提取数据,它被缓存在内存中,等待连接和连接数据。
当源数据完成时,一切都很顺利,但是当我下载新数据时有人连接并且它们足够快以赶上libcurl线程时,它们会陷入饥饿状态。
我的问题是如何在不设置EPOLLOUT的情况下重启拉拔器并让epoll_wait不断告诉我缓冲区中有空间。
我的选择是
EPOLLOUT,会导致很多epoll_waits告诉我缓冲区是空的,直到有一些数据可用。
计时器,我如何决定延迟
有一个连接列表,当有新数据从libcurl线程发送数据时,我不想这样做。
从libcurl线程到epoll循环的某种信号,怎么样?
任何其他想法
答案 0 :(得分:0)
您可以使用eventfd()
文件描述符来允许下载线程在更多数据到达时唤醒epolling线程。
不清楚为什么你不必在select()
实施中解决同样的问题。