Multithreading 设计多线程应用程序(寻找设计模式)
我正在准备编写一个多线程网络应用程序。目前,我想知道我的程序的最佳线程模式是什么。整个应用程序将处理多达1000个描述符(本地文件、各种协议上的网络连接以及定时器和信号处理的附加描述符)。应用程序将针对Linux进行优化。这个程序将在普通的个人电脑上运行,所以我假设他们至少会有奔腾4 以下是我目前的想法:Multithreading 设计多线程应用程序(寻找设计模式),multithreading,Multithreading,我正在准备编写一个多线程网络应用程序。目前,我想知道我的程序的最佳线程模式是什么。整个应用程序将处理多达1000个描述符(本地文件、各种协议上的网络连接以及定时器和信号处理的附加描述符)。应用程序将针对Linux进行优化。这个程序将在普通的个人电脑上运行,所以我假设他们至少会有奔腾4 以下是我目前的想法: 一个线程将处理网络I/O 使用epoll 第二个线程将 像处理本地I/O(磁盘I/O、, 使用epoll的定时器(信号处理) 第三线 将处理UI(CLI、GTK+或Qt) 在单独的线程中处
- 一个线程将处理网络I/O 使用epoll李>
- 第二个线程将 像处理本地I/O(磁盘I/O、, 使用epoll的定时器(信号处理)
- 第三线 将处理UI(CLI、GTK+或Qt)
你知道关于设计多读应用程序的文档/书籍吗?我在寻找一些问题的答案,比如:线程的合理数量是多少?等等。你在正确的轨道上。您希望使用线程池模式来处理网络,而不是每个网络连接使用一个线程 本网站也可能对您有所帮助,并列出了最常见的设计模式以及在什么情况下可以使用它们。 处理磁盘I/O,您可能会考虑在Linux下使用MMAP。这是非常快速和有效的。这样,您就可以让内核来完成这项工作,您可能不需要单独的线程来完成这项工作 我目前正在玩Boost::asio,它看起来相当不错。它在linux上使用epoll。看起来您正在使用像Qt这样的跨平台gui工具包,那么boost asio还将提供跨平台支持,以便您能够在windows或linux上使用它。我认为可能还有一个跨平台的mmap