我可以同时从多个线程调用一个套接字的accept()吗?

时间:2012-07-15 00:27:06

标签: linux multithreading sockets pthreads posix

我使用的是Linux 3.2.0,x86_64。 我可以同时从多个线程调用一个套接字的accept()吗?

1 个答案:

答案 0 :(得分:11)

是的,您可以在多个线程和多个进程的同一个侦听套接字上调用accept(),尽管可能没有您想象的那么多。内核只允许一个成功。当这与进程完成时,它被称为预分叉,它为每个新连接节省了fork()的费用。但是当你处理线程时,你可以更容易地拥有一个等待新连接队列的现有线程池。一个线程执行accept并写入队列,工作线程读取队列并执行其操作。它更清洁,这是一个很好理解的模式,你几乎什么也没有。