我的服务器使用非阻塞套接字多路复用。 我想使用一个线程接收传入连接并处理输入,另一个线程用于通过套接字发送数据。它看起来像这样:
reader_worker(...)
{
...
select(fd_max+1, &read_set, NULL, NULL, NULL);
...
}
writer_worker(...)
{
...
select(fd_max+1, NULL, &write_set, NULL, NULL);
...
}
由于我不想错过传入的连接,我可以想象接收和发送单独的线程会更好。我是否必须锁定可能在read_set和write_set中的套接字?这是正确的方法还是这种方法没有任何性能改进?
答案 0 :(得分:1)
如果您在一个帖子中执行此操作,则不会错过任何传入连接。即使您要发送或接收大量数据,send()或recv()调用的延迟也取决于网络堆栈中本地缓冲区的大小,因此您可以快速返回接受传入连接。
但有两件事,我不确定您的代码示例: