设计多线程应用程序(寻找设计模式)

时间:2010-06-29 08:03:34

标签: multithreading

我正在准备编写多线程网络应用程序。目前我想知道我的程序最好的线程模式是什么。整个应用程序将处理多达1000个描述符(本地文件,各种协议上的网络连接以及用于定时器和信号处理的附加描述符)。应用程序将针对Linux进行优化。程序将在普通的个人计算机上运行,​​所以我认为它们至少会有Pentium 4。

这是我目前的想法:

  • 一个线程将处理网络I / O. 使用epoll。
  • 第二个帖子会 处理类似本地的I / O(磁盘I / O, 定时器,信号处理)使用epoll
  • 第三个帖子 将处理UI(CLI,GTK +或Qt)

由于上下文切换太多,处理单独线程中的每个网络连接将导致CPU终止。

也许有更好的方法来做到这一点?

您是否知道有关设计多线程应用程序的任何文档/书籍?我正在寻找类似问题的答案:线程的合理数量是多少?等

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。您希望使用线程池模式来处理网络,而不是每个网络连接使用一个线程。

此网站也可能对您有所帮助,并列出最常见的设计模式以及可在何种情况下使用它们。 http://sourcemaking.com/design_patterns/

要处理磁盘I / O,您可以考虑在linux下使用mmap。它非常快速有效。这样,您将让内核完成工作,您可能不需要单独的线程。

我目前正在玩Boost :: asio,这似乎相当不错。它在linux上使用epoll。看起来你正在使用像Qt这样的跨平台gui工具包,那么boost asio也将提供跨平台支持,这样你就可以在windows或linux上使用它。我想也可能有一个跨平台的mmap。