zoukankan      html  css  js  c++  java
  • GIL全局锁测试

    基础知识:https://www.cnblogs.com/SuKiWX/p/8804974.html

    测试环境

    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下相差会有百分之三四十,我这边测了几回都是差不多
  • 相关阅读:
    jpype
    Java获取类中的所有方法
    SQL中INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN区别
    如何用命令将本地项目上传到git
    Java连接Mysql:通过配置文件
    lsof -i:port_number
    yum install lsof
    Git的基本使用方法(受益匪浅)
    [后端]gitlab之gitlab-ci自动部署
    centos7安装redis-4.0.1集群
  • 原文地址:https://www.cnblogs.com/lurenjia1994/p/10600953.html
Copyright © 2011-2022 走看看