Str*_*101 7 linux concurrency multithreading tcp
我正在编写一个并发TCP服务器,它必须使用'每个连接的线程'方法处理多个连接(使用线程池).我怀疑哪个是每个线程获得不同文件描述符的最佳方式.
我发现接下来的两种方法是最推荐的:
accepts()所有的传入连接和存储他们的描述符上的数据结构(例如:一queue).然后每个线程都能从队列中获取fd.我找到他们每个人的问题:
mutex_lock),因此在相当多的线程想要在同一时刻读取的情况下,我不知道会经过多长时间直到所有人都能实现目标.accept()还没有在Linux上完全解决,所以也许我需要为它创建一个人工解决方案,最终使应用程序至少与方法一样慢1.资料来源:
(一些链接在讨论方法2:在Linux上存在一个雷鸣般的问题 - 存在问题 - 以及我发现的一篇文章(过时):linux-scalability/reports/accept.html
并且建议方法1的SO答案:可以同时调用接受一个插槽从几个线程同时
我真的对此事感兴趣,所以我会很感激任何意见:)
正如您链接的StackOverflow答案中所提到的,调用accept()的单个线程可能就是这样.您提到了有关锁定的问题,但是现在您将在Boost.Lockfree,Intel TBB和其他地方找到可用的无锁队列实现.如果您愿意,可以使用其中一个,但是您可能只使用条件变量让工作线程休眠并在建立新连接时唤醒其中一个线程.