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

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

问题描述:

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

这是我目前的想法:

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

处理单独线程中的每个网络连接会由于上下文切换过多而导致CPU死亡。

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

您是否知道有关设计多核应用程序的任何文档/书籍?我正在寻找如下问题的答案:什么是有理数的线程?等等。

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

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

要处理磁盘I/O,您可能会考虑在Linux下使用mmap。它非常快速和高效。这样,你会让内核完成这项工作,你可能不需要一个单独的线程来完成这个任务。

我目前在玩Boost :: asio,这似乎很不错。它在linux上使用epoll。看起来你正在使用像Qt这样的跨平台GUI工具包,然后boost asio也会提供跨平台支持,所以你可以在windows或linux上使用它。我认为也可能有跨平台mmap。