谁能帮助我回答有关epoll_wait的问题.
使用许多线程在相同的fds集上调用epoll_wait以服务于大约100K活动套接字是否过度?或者仅仅创建一个线程来执行epoll_wait就足够了?
例如,只有一个套接字准备好读取数据时,epoll_wait会唤醒多少个线程?我的意思是,有两个或更多线程从epoll_wait唤醒但在结果事件中会有相同的fds的情况吗?
在服务器中组织线程的最佳方法是什么,它适用于许多活动客户端(例如50K +).我认为最好的方法是:1个I/O工作线程,它可以执行epoll_wait和i/o操作.+ 许多数据处理线程将处理从I/O工作线程接收的数据(可能需要很长时间,例如任何游戏逻辑)并为I/O工作线程编写新数据以发送给客户端.我是对的,或者任何人都可以帮助我找出组织这种方法的最佳方法吗?
在此先感谢,Valentin
使用epoll时,您希望将线程总数调整为要用于处理的物理CPU核心(或超线程调度单元)的数量.仅使用一个线程进行工作意味着一次最多只有一个核心处于活动状态.
它取决于epoll文件描述符的模式.事件可以是"边缘触发",意味着它们只是原子地发生一次,或者"水平触发"意味着如果缓冲区中有空间,任何调用者都会获得事件.
没有足够的信息说.为简单起见,我建议根本不要使用特殊用途线程,只需在接收它的线程中处理每个事件的"命令".但显然这取决于您的应用程序的性质.