gpt4 book ai didi

linux - EPOLL 和传入流的饥饿

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:46 26 4
gpt4 key购买 nike

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

我的代码可以正常工作,但遇到了一个问题,我正在尝试找出解决问题的最佳方法。

系统有一个 libcurl 线程从外部源拉取数据,它缓存在内存中等待拉取器连接并获取数据。

当源数据完成时一切都很好,但是当有人在我下载新数据时连接并且他们的速度足以 catch libcurl 线程时,他们就会陷入饥饿状态。

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

我的选择是

  1. EPOLLOUT,将导致大量 epoll_waits 告诉我缓冲区为空,直到有一些数据可用。

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

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

  4. 从 libcurl 线程到 epoll 循环的某种信号,如何?

任何其他想法

最佳答案

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

虽然不清楚为什么您不必在 select() 实现中解决相同的问题。

关于linux - EPOLL 和传入流的饥饿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33268978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com