python:直观感受GIL锁

以下代码可以直观感受GIL锁对性能的影响

import time
from multiprocessing import Process
from threading import Thread


def count():
    i = 100000000
    while i > 0:
        i -= 1


if __name__ == '__main__':
    start = time.time()
    count()
    count()
    count()
    print("单线程运行3个任务", time.time() - start)

    start = time.time()
    ts = [Thread(target=count) for i in range(3)]
    [t.start() for t in ts]
    [t.join() for t in ts]
    print("多线程运行3个任务", time.time() - start)

    start = time.time()
    ts = [Process(target=count) for i in range(3)]
    [t.start() for t in ts]
    [t.join() for t in ts]
    print("多进程运行3个任务", time.time() - start)

运行结果:

由于python中多线程需要先得到GIL锁然后执行,这就导致python中的多线程并不能真正利用多核实现真正的多线程并行执行,反而会因为锁的竞争造成更多的消耗。

解决方法就是使用多进程

Leave a Comment