Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 设计多线程应用程序(寻找设计模式)_Multithreading - Fatal编程技术网

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

Multithreading 设计多线程应用程序(寻找设计模式),multithreading,Multithreading,我正在准备编写一个多线程网络应用程序。目前,我想知道我的程序的最佳线程模式是什么。整个应用程序将处理多达1000个描述符(本地文件、各种协议上的网络连接以及定时器和信号处理的附加描述符)。应用程序将针对Linux进行优化。这个程序将在普通的个人电脑上运行,所以我假设他们至少会有奔腾4 以下是我目前的想法: 一个线程将处理网络I/O 使用epoll 第二个线程将 像处理本地I/O(磁盘I/O、, 使用epoll的定时器(信号处理) 第三线 将处理UI(CLI、GTK+或Qt) 在单独的线程中处

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

以下是我目前的想法:

  • 一个线程将处理网络I/O 使用epoll
  • 第二个线程将 像处理本地I/O(磁盘I/O、, 使用epoll的定时器(信号处理)
  • 第三线 将处理UI(CLI、GTK+或Qt)
在单独的线程中处理每个网络连接会因为太多的上下文切换而导致CPU死机

也许有更好的办法


你知道关于设计多读应用程序的文档/书籍吗?我在寻找一些问题的答案,比如:线程的合理数量是多少?等等。

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

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

处理磁盘I/O,您可能会考虑在Linux下使用MMAP。这是非常快速和有效的。这样,您就可以让内核来完成这项工作,您可能不需要单独的线程来完成这项工作

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