好好利用线程?

时间:2009-04-17 17:23:44

标签: linux multithreading winapi

我有一套非常昂贵的操作,但它们都是独立的。其中一些依赖于某些“全局”状态或数据,但都非常只读。我相当肯定,操作本身都可以并行完成,但所有操作都需要在程序进行到某一点之前完成。

在这里添加额外的工作和多线程的危险是否值得,特别是因为主线程必须阻塞并等待呢?

其他问题是这个应用程序很可能必须在Windows和Linux上运行,我不确定添加使用两个不同线程系统的代码的复杂性。

4 个答案:

答案 0 :(得分:5)

嗯,第一个问题是:你真的有问题吗?

听起来你肯定可以安全有效地并行化这个,但是如果等待操作串行执行实际上不是问题,那么可能不值得担心。

例如,如果这是一个在一夜之间执行的批处理应用程序,则可能不值得这样做。但是,如果这是面向用户的应用程序并且用户厌倦了等待,那么听起来使用多线程来解决问题是值得的。

答案 1 :(得分:4)

除非你的工作线程是一些没有并行化好处的病态案例,否则它们可能比并行完成并行更快。因此,它是否值得的问题变成了节省多少时间以及在上下文中对你有多大价值。如果有一个烦人的用户等待鼠标点击做某事,那么在10秒内保存5秒是一个有意义的好处。在cron工作中可以节省相同的费用,而不是那么多。

如果您认为它有可能为您做一些有用的事情,请构建快速测试版并对其进行分析

答案 2 :(得分:2)

您所描述的是并发术语中的Barrier,并且在许多类型的应用程序中非常流行。

如果没有更多详细信息,很难说它是否适合您的应用。

答案 3 :(得分:1)

如果您有多核处理器,那么您可以同时运行线程并通过并行性获得加速。

但是,我认为线程的主要用途是允许更容易编写多个逻辑操作链,特别是如果它们涉及等待外部事件,如用户输入或I / O完成。