GIL全局鎖測試

基礎知識:http://www.javashuo.com/article/p-ecqfkznl-c.htmlhtml

 

測試環境

python3.7默認解釋器(cpython)
cpu爲四核

 

測試代碼

#! /usr/bin/python
import time
from threading import Thread
from multiprocessing import Process
CPU_NUM = 4


def my_counter():
    i = 0
    for _ in range(100000000):
        i = i + 1
    return True


def test_for_serial():
    '''線程依次執行測試'''
    start_time = time.time()
    for tid in range(CPU_NUM):
        t = Thread(target=my_counter)
        t.start()
        t.join()
    end_time = time.time()
    print("線程依次執行耗時: {}".format(end_time - start_time))


def test_for_concurrent():
    '''線程同時執行測試'''
    ts = []
    start_time = time.time()

    for tid in range(CPU_NUM):
        t = Thread(target=my_counter)
        t.start()
        ts.append(t)

    for t in ts:
        t.join()

    end_time = time.time()
    print("線程同時執行耗時: {}".format(end_time - start_time))


def test_for_process(base=1):
    '''進程同時執行'''
    ts = []
    start_time = time.time()

    for tid in range(CPU_NUM * base):
        t = Process(target=my_counter)
        t.start()
        ts.append(t)

    for t in ts:
        t.join()

    end_time = time.time()
    print("進程同時執行耗時: {}".format(end_time - start_time))


if __name__ == '__main__':
    test_for_serial()
    test_for_concurrent()
    test_for_process(1)
View Code

 

測試結果

 

 

結論

1. 多線程能避開GIL鎖
2. 多線程同時執行跟多線程依次執行耗時相差不大,應該是python3.7有改進鎖釋放提升效率了。別人博客看到py2.7下相差會有百分之三四十,我這邊測了幾次都是差很少
相關文章
相關標籤/搜索