Multithreading 我的代码需要使用多线程,有哪些迹象可以说明问题?

Multithreading 我的代码需要使用多线程,有哪些迹象可以说明问题?,multithreading,Multithreading,我使用的是第三方API,它执行我认为在所用时间/资源(图像识别等)方面代价高昂的操作。有什么迹象表明测试中的代码应该使用线程来提高性能 我有一个分析器,将对我编写的依赖于此API的代码进行评测 谢谢 < P>如果你有两个不同的事件序列,它们不依赖于另一个,那么考虑它。如果为了确保两个操作不会相互妨碍而必须编写一组逻辑,那么通过使这两段代码更清晰就可以获得回报 另一方面,如果您发现,在尝试实现多线程时,您必须添加大量代码来在线程之间通信结果,因为一个(或两个)无法在没有来自另一个的一些信息的情况下

我使用的是第三方API,它执行我认为在所用时间/资源(图像识别等)方面代价高昂的操作。有什么迹象表明测试中的代码应该使用线程来提高性能

我有一个分析器,将对我编写的依赖于此API的代码进行评测


谢谢

< P>如果你有两个不同的事件序列,它们不依赖于另一个,那么考虑它。如果为了确保两个操作不会相互妨碍而必须编写一组逻辑,那么通过使这两段代码更清晰就可以获得回报

另一方面,如果您发现,在尝试实现多线程时,您必须添加大量代码来在线程之间通信结果,因为一个(或两个)无法在没有来自另一个的一些信息的情况下继续进行,这是一个很好的迹象,表明您正在尝试在没有意义的地方创建线程

在一种情况下,使用多线程是有意义的,即使您必须添加通信来完成它,这就是当您有一个任务需要保持可供输入的状态,而另一个任务需要执行繁重的计算时。一个线程可能会轮询某个地方的输入,在没有可用输入时阻塞,以便在输入可用时及时响应,并将作业提供给另一个“工作者”线程,以便处理始终持续,而不仅仅是在有输入时


另一件要考虑的事情是,即使当一个作业“尴尬并行”(即,在并行化的部分之间需要很少或没有通信)时,也有多线程可能不值得的情况。如果您的CPU可以将不同的线程分配给不同的内核,那么多线程将通过允许多个内核同时处理工作来提高速度。但是,在单核处理器上,甚至在具有不幸操作系统的多核处理器上,拥有多个线程不会加快速度,因为单核处理器仍然需要完成所有工作。

图像处理通常需要cpu。但是,如果您的图像处理api已经设计为利用多个CPU,那么多线程可能对您没有帮助。我通常认为快速确定多线程有帮助的策略是编写一个简单的程序,一次又一次地进行相关的处理。然后,我将在一组数据上运行它,然后同时在一半的数据上运行两个进程实例。无需确保此类测试的数据均衡;如果一个进程用完了,它将只运行一个实例来处理剩余的任何内容。通过墙上的时钟计时。我的意思是字面上的;选择一个足够大的数据集,使其运行至少需要一分钟,但理想情况下需要5分钟或更长时间)

如果同时运行两个拷贝可以显著提高吞吐量,那么多线程可能是一个好主意。显然,这种策略只适用于某些情况,在某些情况下,多线程可能涉及以这种技巧无法模仿的方式利用共享输出。但是,这是一个非常容易运行的测试,很少需要编写太多(如果有的话)代码