【问题标题】:Does using multiple threads in python really produce overhead(GIL)?在 python 中使用多个线程真的会产生开销(GIL)吗?
【发布时间】:2023-04-04 07:19:01
【问题描述】:

来自pythonwiki

但是,即使 GIL 不是瓶颈,它也会降低性能。总结这些幻灯片:系统调用开销很大,尤其是在多核硬件上。两个线程调用一个函数可能需要两倍于单个线程调用该函数两次的时间。 GIL 可以导致 I/O 绑定线程在 CPU 绑定线程之前调度。它会阻止信号传递。

我尝试先在单个线程中运行一个简单的函数,然后将其与使用 5 个线程进行比较:

from threading import Thread
import time


def count(n):
    while n > 0:
        n -= 1


a=time.time()
count(100000000)
count(100000000)
count(100000000)
count(100000000)
count(100000000)

print(time.time()-a)

a = time.time()
t1 = Thread(target=count, args=(100000000,))
t1.start()
t2 = Thread(target=count, args=(100000000,))
t2.start()
t3 = Thread(target=count, args=(100000000,))
t3.start()
t4 = Thread(target=count, args=(100000000,))
t4.start()
t5 = Thread(target=count, args=(100000000,))
t5.start()
t1.join()
t2.join()
t3.join()
t4.join()
t5.join()
print(time.time()-a)

我尝试了不同数量的线程,并且每次多线程版本运行(略微)更快。我在运行 intel i5 4 核处理器(8 个逻辑核)的 Windows 10 机器(64 位)上使用 python 3.7.3(64 位)。

我真的才刚刚开始学习线程,一开始就被卡住是非常令人沮丧的。我还在谷歌搜索发现的其他一些文章中发现了相同的不一致之处,这些文章使用了基本相同的示例代码。我想我的问题是,是否有人可以提供更合适的示例或链接到更清晰的研究。

【问题讨论】:

    标签:
    python
    python-multithreading
    gil