我的多线程网络服务器程序有问题。
我有一个正在侦听新客户端连接的主线程。我使用 Linux epoll 来获取 I/O 事件通知。对于每个传入事件,我创建一个线程来接受新连接并为其分配一个 fd。在重负载下,可能会发生同一个 fd 被分配两次导致我的程序崩溃的情况。
我的问题是:系统如何重新分配一个仍被另一个线程使用的fd?
Thanks,
据推测,这里存在竞争条件 - 但如果没有看到您的代码,就很难诊断。
你最好accept
在主线程上,然后将接受的套接字传递给新线程。
如果您将侦听套接字传递给新线程然后执行接受 - 您将遇到竞争条件。
欲了解更多信息,您可以查看这里:https://stackoverflow.com/a/4687952/516138 https://stackoverflow.com/a/4687952/516138
And this http://www.kegel.com/c10k.html是有关网络效率的良好背景(尽管可能有点过时)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)