0

我有一个使用 10 个线程的线程池的多线程应用程序。每个线程需要 5 分钟来处理输入。是否有一个法律/公式来管理处理 n 个输入所花费的总时间?

换句话说,是否可以说每 5 分钟可以处理 10 个输入,那么处理 100 个输入需要 50 分钟?

4

2 回答 2

2

除了计算能力(处理器/内核)和硬件资源依赖(硬盘、I/O 竞争等)之外,还应考虑数据依赖。例如,如果每个输入的处理包括由所有其他线程更新共享数据,这需要锁定(互斥),那么总吞吐量将小于 10 倍,即使它是一个多核处理器。 10个核心。最大加速取决于临界区的比例。如果需要公式,请参考著名的阿姆达尔定律:en.wikipedia.org/wiki/Amdahl's_law

于 2012-04-30T14:34:30.930 回答
1

并非如此,您必须考虑所需的总计算能力。例如,如果一个线程需要 5 分钟来完成工作,并且在此期间处理器完全耗尽,那么额外的线程将无济于事。在另一个极端,如果处理器利用率接近于零(例如,所有时间都花在等待 I/O 上),那么您建议的计算将起作用。因此,您必须考虑计算所使用的实际资源。

于 2012-04-30T06:16:10.640 回答