我想使用多线程来加速我的程序,但不确定哪种方式是最佳的。
假设我们有 10000 个小任务,完成其中一个可能只需要 0.1 秒。现在我有一个 12 核的 CPU,我想用 12 个线程让它更快。
据我所知,有两种方法:
1.任务池
总是有 12 个线程在运行,每个线程在完成当前工作后从任务池中获取一个新任务。
2.单独的任务
通过将 10000 个任务分成 12 个部分,每个线程在一个部分上工作。
问题是,如果我使用任务池,当多个线程尝试访问任务池时,锁定/解锁是浪费时间。但是第二种方式并不理想,因为一些线程提前完成,总时间取决于最慢的线程。
我想知道你是如何处理这种工作的,还有其他最好的方法吗?谢谢你。
编辑:请注意,数字 10000 只是举例,在实践中,它可能是 1e8 或更多任务,每个任务 0.1 也是平均时间。
EDIT2:感谢您的所有回答 :] 很高兴知道各种选项。