即
答案 0 :(得分:4)
通常,让多个线程在同一个套接字上执行IO而不在它们之间进行某种同步并不是一个好主意。在您的场景中,您可能会看到类似的内容:
accept
,1个调用成功,N-1阻塞(或失败,如果你的侦听套接字是非阻塞的)更常用的方法是让父线程循环在侦听套接字上调用accept
,并为每个传入请求启动子线程。 (或者,如果您担心线程创建开销,则可以使用一个子线程池,在空闲时等待条件变量;父级将新接受的套接字添加到队列并使用pthread_cond_signal
唤醒一个孩子来处理它。)
答案 1 :(得分:3)
是的,你可以,但你的例子有点不完整:
epoll_wait确保只有一个线程获取连接事件,并且只有该线程才会调用accept。
如果您创建两个epoll集并将listen_socket注册到它们两个,您将收到两次事件,每个epoll集一次,并且不建议这样做。
您可以参考本教程http://www.devshed.com/c/a/BrainDump/Linux-Files-and-the-Event-Poll-Interface/并在此论坛http://www.developerweb.net/forum/中搜索有关epoll的一些有趣讨论,以了解详情。
有关更详细的示例,您可以随时参考libev,libevent或nginx源代码。