首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计多线程应用程序(寻找设计模式)

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

Stack Overflow用户
提问于 2010-06-29 08:03:33
回答 1查看 823关注 1票数 2

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

以下是我目前的想法:

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

在单独的线程中处理每个网络连接会因为太多的上下文开关而耗尽CPU。

也许有更好的方法来做这个?

你知道关于设计多人阅读应用程序的文档/书籍吗?我正在寻找类似这样的问题的答案:线程的合理数量是多少?等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-25 10:20:26

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

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

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

我目前正在玩助推::asio,这似乎相当不错。它在linux上使用epoll。由于您使用的是像Qt这样的跨平台gui工具包,那么boost asio还将提供跨平台支持,这样您就可以在windows或linux上使用它。我想可能也会有一个跨平台地图。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3138872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档