我正在使用python 2.7在Ubuntu上运行这个非常简单的例子。
#!/usr/bin/python
import threading
threads = []
def incrementCounter(tid):
print("Thread " + str(tid) + " is starting")
counter = 0;
for i in range(5000000):
counter = counter + 1
print("Thread " + str(tid) + " is done")
def main():
for i in range(24):
t = threading.Thread(target=incrementCounter, args=(i, ))
t.start();
threads.append(t)
for i in range(24):
for t in threads:
t.join()
if __name__ == '__main__':
main()
我在拥有24核处理器的计算机上运行它。我运行它时没有线程并行性。当与此代码同时运行时,Vmstat显示CPU有95%的空闲时间。在顶部显示CPU利用率为150%,这意味着我们完全使用1.5核心。当我在主窗口中按Ctrl-C时,我的CPU利用率达到2398%,每个核心几乎达到100%。但是,运行vmstat会显示这是系统CPU使用率。使用的CPU是一位数。该计划需要永远完成。
当我用进程替换线程时,如:
p = Process(target=incrementCounter, args=(i, ))
p.start();
processes.append(p)
(以及所有其他预期的更改),我获得完全并行,程序即时完成。
似乎没有与线程的并行性。线程。 vmstat输出还显示了大量的中断和上下文切换,这表明线程正在按顺序运行。
任何人都知道发生了什么?