![]() |
1
22
这种设计是低效的,因为很少的任务分解会产生和cpu一样多的任务。 更合理的设计是将任务分解为“作业”,然后使用线程池机制来分派这些作业。 与每模块线程方法相比的优势:
|
![]() |
2
7
我不会称自己为多线程设计专家。但我至少在处理线程时遇到过各种问题,试图将它们设计为协同工作(通信、锁定资源、等待线程结束等)。 在这一点上,我的经验法则是,我必须证明每个新线程的存在。例如,如果我使用的网络层同时提供了同步和异步API,我真的可以证明让网络代码在新线程中使用同步调用而不是只在主线程中使用异步调用是合理的吗?在您的例子中,有多少模块因为特定的原因需要自己的线程。有没有可以从主线程依次调用的? 如果有些线程没有存在的充分理由,那么 可以 只需将该模块放在主线程中,就可以省去一些麻烦和复杂性。
我不知道有什么“正确”的方法。很多都归结为应用程序实际应该做什么的细节。 |
![]() |
3
3
异步事件在单独的线程中也很好。你的定时器模块在这里看起来是个不错的选择。 您可能希望将其他模块放在一个线程中,以降低应用程序的复杂性。但是,如果你有一个多处理器系统,你可能想把它们分开。 有一个很好的锁定资源和互斥处理策略来防止死锁。依赖关系图(使用白板!)可能有助于使你的设计正确。 祝你好运!听起来像是一个复杂的系统,将导致许多小时的有趣的发展! |
![]() |
4
1
什么站台? High Performance Windows Programs . 还有其他一些因素在起作用,比如网络模块必须处理的协议类型。请求-响应协议通常由每个请求一个线程来处理,它们做得很好,但是高吞吐量的大规模协议在该模型中的表现并不好,特别是因为需求。 归根结底,仅仅从这个简短的描述很难判断你的设计是否合理。就我个人而言,我倾向于IO完成驱动的线程模型,而不是逻辑模块驱动的线程模型,但那只是我自己。 |
![]() |
5
1
认可的。
你确定这三个线程不能合并成一个主数据处理线程吗?如果是这样的话,那么就可以像其他人建议的那样使用线程池,让N个线程执行这个处理。
这在大多数平台上可能是合理的,因为您需要一个消息处理循环来调度计时器事件。另外,如果您需要一个GUI,它可能就是您想要的地方。
我建议在每个线程中保留单独的计数器,并在需要时为它们轮询(消息队列)。
|
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 3 年前 |