使用下面的程序,我得到几乎100%的CPU使用率的所有核心。我使用的是Intel®Core™ Ubuntu20.04.2LTS(Focal Fossa)64位系统和python 3.8上的i5-8250U CPU@1.60GHz×8。我一直认为python使用的是绿色线程,由于GIL,一次只能使用一个内核。在https://docs.python.org/3/glossary.html#term-global-interpreter-lock处写着:
“CPython解释器使用的机制,用于确保一次只有一个线程执行Python字节码。这通过创建对象模型(包括关键的内置类型,如dict)简化了CPython的实现。”隐式安全,防止并发访问。锁定整个解释器使解释器更容易成为多线程的解释器,而牺牲了多处理器机器提供的大部分并行性。”
我到底怎么了
from threading import Thread
class TestThread(Thread):
def __init__(self, name):
Thread.__init__(self)
self.name = name
def run(self):
for i in range(1000000):
print(f"Thread {self.name} is running")
def create_threads():
for i in range(100000):
name = f"#{i}"
my_thread = TestThread(name)
my_thread.start()
if __name__ == "__main__":
create_threads()
编辑: CPU负载可能来自执行所有IO的内核。但我仍然不明白的是,如果我只使用一个执行大量IO的python线程,为什么会有如此大的不同
if __name__ == "__main__":
# create_threads()
for i in range(100000000):
print(f"in loop {i}")
目前没有回答
相关问题 更多 >
编程相关推荐