我正准备编写一个多线程网络应用程序。目前,我想知道我的程序最好的线程模式是什么。整个应用程序将处理多达1000个描述符(本地文件、各种协议上的网络连接以及用于定时器和信号处理的附加描述符)。将为Linux优化应用程序。程序将运行在普通的个人电脑上,所以我假设,他们至少会有奔腾4。
以下是我目前的想法:
。
在单独的线程中处理每个网络连接会因为太多的上下文开关而耗尽CPU。
也许有更好的方法来做这个?
你知道关于设计多人阅读应用程序的文档/书籍吗?我正在寻找类似这样的问题的答案:线程的合理数量是多少?等。
发布于 2010-08-25 10:20:26
你走在正确的轨道上。您希望使用线程池模式来处理网络,而不是每个网络连接一个线程。
这个网站也可能对你有帮助,列出最常见的设计模式,以及它们可以在什么情况下使用。http://sourcemaking.com/design_patterns/
要处理磁盘I/O,您可能需要考虑在linux下使用mmap。它非常快速和高效。这样,您将让内核完成工作,并且您可能不需要一个单独的线程。
我目前正在玩助推::asio,这似乎相当不错。它在linux上使用epoll。由于您使用的是像Qt这样的跨平台gui工具包,那么boost asio还将提供跨平台支持,这样您就可以在windows或linux上使用它。我想可能也会有一个跨平台地图。
https://stackoverflow.com/questions/3138872
复制相似问题