是否有一种算法可以检查创建新线程是否能够带来性能? 我将设置最多可以创建的线程,但如果我只添加一个任务,那么为此启动一个新线程将不是一个优势。 我使用的编程语言是python。
这个问题甚至可以回答,还是一般性问题,因为它取决于线程的工作原理?
答案 0 :(得分:4)
python(至少是标准的CPython)是一个特例,因为它不会一次运行多个线程,因此如果你在多核上进行数字运算,那么纯python实际上不是最好的选择。
在CPython中,运行python代码时,只有一个线程正在执行。它受Global Interpreter Lock保护。如果你正在进行IO或睡觉或等待另一方面,那么python线程是有意义的。
如果你是数字运算,那么你可能想要在C-extension中做到这一点。没有multiprocessing library为纯python代码提供了一种利用多核的方法。
一般情况下,非python案例:问题无法回答,因为它取决于:
如果你的任务是独立的并且受CPU限制,那么每个CPU核心运行一个可能是最好的 - 但是在python中你需要多个进程来利用它们。
答案 1 :(得分:3)
经验法则:如果一个线程要进行输入/输出,则可能值得将它分开。
如果正在进行数字运算,那么最佳线程数就是CPU数量。
答案 2 :(得分:0)
测试会告诉你。
基本尝试和基准测试。
答案 3 :(得分:0)
对此没有一般答案......但有一个趋势。由于计算机获得越来越多的CPU核心(尝试购买新的单CPU PC ......),使用线程成为事实上的标准。
因此,如果您有一些可以并行化的工作,那么一定要使用线程模块并创建一个工作池。在最坏的情况下(这只是一个线程),这不会使你的代码慢得多,但如果用户拥有更强大的PC,它可以使代码更快。
在最糟糕的情况下,您的程序将在不到100毫秒后完成 - >人们不会注意到减速,但他们会注意到8芯的加速。