我正在准备编写多线程网络应用程序。目前我想知道我的程序最好的线程模式是什么。整个应用程序将处理多达1000个描述符(本地文件,各种协议上的网络连接以及用于定时器和信号处理的附加描述符)。应用程序将针对Linux进行优化。程序将在普通的个人计算机上运行,所以我认为它们至少会有Pentium 4。
这是我目前的想法:
由于上下文切换太多,处理单独线程中的每个网络连接将导致CPU终止。
也许有更好的方法来做到这一点?
您是否知道有关设计多线程应用程序的任何文档/书籍?我正在寻找类似问题的答案:线程的合理数量是多少?等
答案 0 :(得分:2)
你走在正确的轨道上。您希望使用线程池模式来处理网络,而不是每个网络连接使用一个线程。
此网站也可能对您有所帮助,并列出最常见的设计模式以及可在何种情况下使用它们。 http://sourcemaking.com/design_patterns/
要处理磁盘I / O,您可以考虑在linux下使用mmap。它非常快速有效。这样,您将让内核完成工作,您可能不需要单独的线程。
我目前正在玩Boost :: asio,这似乎相当不错。它在linux上使用epoll。看起来你正在使用像Qt这样的跨平台gui工具包,那么boost asio也将提供跨平台支持,这样你就可以在windows或linux上使用它。我想也可能有一个跨平台的mmap。