我有一个多线程应用程序,它使用10个线程的线程池。每个线程需要5分钟来处理输入。是否有法律/公式来管理处理n个输入所需的总时间?
换句话说,是不是说每5分钟就可以处理10个输入,所以要处理100个输入,需要50分钟?
答案 0 :(得分:2)
除了计算能力(处理器/核心)和硬件资源依赖性(硬盘,I / O竞争等)之外,还应考虑数据依赖性。例如,如果每个输入的处理包括由所有其他线程更新共享数据,这需要锁定(互斥),那么总吞吐量将小于10倍,即使它是一个多核处理器超过10个核心。最大加速速度取决于临界区的比例。如果您需要公式,请参阅着名的Amdahl定律:en.wikipedia.org/wiki/Amdahl's_law
答案 1 :(得分:1)
实际上,您必须考虑所需的总计算能力。例如,如果一个线程需要5分钟来完成工作,并且处理器在此期间被完全消耗,那么其他线程将无法帮助您。另一方面,如果处理器利用率接近于零(例如,所有时间都花在等待I / O上),那么您提出的计算将起作用。所以你必须考虑计算使用的实际资源。