2010-04-10 32 views

回答

1

如果你有两个不依赖于另一个的不同序列的事件,那么考虑它。如果你必须编写一堆逻辑来确保两个操作不会以其他方式进行,那么通过使两段代码更清晰可以得到回报。

另一方面,如果你发现在尝试创建多线程的东西时,必须添加gobs的代码来在线程之间传递结果,因为一个(或两者)不能在没有来自另一个,这是一个很好的迹象,表明你正在努力使它们在不是有意义。在有意义去多线程,甚至当你必须添加通信做

一种情况,就是当你有需要留下可供输入一个任务,而另一个从事繁重的计算。一个线程可以轮询从什么地方输入,当没有为阻止可用,所以,当输入可用它在及时回应,和饲料工作到另一个“工人”线程,以便继续处理在任何时候,不只是当有投入时。

另一件需要考虑的事情是,即使某项工作是“令人尴尬的并行”(即需要很少或根本不需要并行化部分之间的通信),也存在多线程可能不值得的情况。如果您的CPU可以将不同的线程分配给不同的内核,多线程将允许您通过允许多个内核同时咀嚼工作来加快速度。但是在单核心处理器上,甚至是多核心处理器上,如果有多个线程,都不会加速实现,因为一个核心仍然需要完成所有工作。

1

图像处理常常是由CPU的约束。但是,如果您的图像处理API已经被设计为利用多个cpus,多线程可能无法帮助您。我通常考虑的用于快速确定多线程是否有用的策略是编写一个简单的程序,一次又一次地执行相关处理。然后,我将在一组数据上运行它,然后同时运行该进程的两个实例,每个实例都有一半的数据。没有必要确保这种测试的数据均衡;如果一个进程耗尽,它将只剩下一个实例。定时是通过挂钟时间完成的。我的意思是字面意思;选择足够大的数据集,至少需要一整分钟才能运行,但理想情况下需要5分钟或更长时间)。

如果在同一时间运行两个副本提高吞吐量显著,多线程可能是一个好主意。显然,这种策略在某些情况下是可行的,在某些情况下,多线程可以通过这种技巧无法模拟的方式来利用共享输出。但是,这是一个非常简单的测试,并且很少需要编写很多(如果有的话)代码。

相关问题