首页
学习
活动
专区
圈层
工具
发布

epoll性能
EN

Stack Overflow用户
提问于 2010-01-18 16:55:23
回答 3查看 8.3K关注 0票数 10

有谁能帮我回答关于epoll_wait的问题吗?

  1. 是否过度使用在相同的fds上调用epoll_wait的线程,这些线程在大约100 K活动套接字上服务?或者仅仅创建一个线程来执行epoll_wait?
  2. How就足够了吗?例如,当只有一个套接字准备读取数据时,许多线程会从epoll_wait中醒来吗?我的意思是,是否会出现两个或更多线程从epoll_wait中醒来,但在结果事件中具有相同的fds的情况?
  3. --在与许多活动客户端(例如50K+)一起工作的服务器中组织线程的最佳方法是什么?我认为最好的方法是:1 I/O Worker Thread,它从epoll_wait和i/o操作中分离出来。+多个数据处理线程,它将处理从I/O工作线程接收到的数据(可能需要很长的时间,例如任何游戏逻辑),并为I/O工作线程向客户端发送新的数据。在这种方法中,我是正确的吗?或者有人能帮助我找到组织这个问题的最佳方法吗?

谢谢你,瓦伦丁

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-18 18:10:03

  1. 在使用epoll时,希望将线程总数调整为要用于处理的物理CPU核心(或超线程分派单元)的数量。只使用一个线程来工作意味着一次最多只能有一个内核处于活动状态。
  2. 依赖于epoll文件描述符的模式。事件可以是“边缘触发的”,这意味着它们只能原子地发生一次,或者“级别触发”意味着,如果缓冲区中有空间,任何调用方都会得到一个事件。
  3. 没有足够的信息来说明。为了简单起见,我建议完全不使用特殊的线程,只需在接收到的线程中处理每个事件的“命令”。但很明显,这取决于应用程序的性质。
票数 12
EN

Stack Overflow用户

发布于 2010-01-18 17:14:40

我向您推荐2006年的阅读:http://www.kegel.com/c10k.html

票数 5
EN

Stack Overflow用户

发布于 2017-06-21 14:54:59

实际上,这是epoll的错误用例。

绝对不能在线程之间共享epoll fd。否则,有可能一个线程在一个fd上读取部分传入数据,而另一个线程也在同一个fd上读取另一个线程,而不知道数据的哪一部分在另一部分之前。

只需在每个调用epoll_wait的线程中调用epoll_wait。否则I/O就坏了。

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2087688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档