ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

对于python中GIL的一些理解与代码实现

2022-06-03 11:31:36  阅读:181  来源: 互联网

标签:Count __ python 代码 countdown time GIL pool


 

近期看了一些关于GIL的一些内容,敲一下代码看看效果。

# coding:utf-8
# GIL(Global Interpreter Lock):他只允许任何时刻只有一个线程处于执行状态,即使是在具有多个CPU内核的多线程架构中。
# 为什么没有删除GIL,因为现在的python已经严重依赖GIL提供的解决方案。如果删除会破坏现有的C扩展。(free threading 就是删除的案例,他会导致单线程任务速度降低40%。)
# 释放GIL:以前版本是采用计数策略删除,如果该线程计数为0,则删除。现在采用固定时间间隔,到了时间点就删除。
import time
from threading import Thread
from multiprocessing import Pool
Count = 50000000
def countdown(n):
    while n>0:
         n-=1
if __name__ == "__main__":
    # 不采用多进程和多线程
    start1 = time.time()
    countdown(Count)
    end1 = time.time()
    print("2:", end1 - start1)  # 2.538

    # 采用多线程
    # t1 = Thread(target=countdown, args=(Count // 2,))
    # t2 = Thread(target=countdown, args=(Count // 2,))
    # start = time.time()
    # t1.start()
    # t2.start()
    # t1.join()  # 这个方法主要是为了阻塞当前线程
    # t2.join()  # 至于为什么,我觉得可能是为了防止同一时刻有多个线程访问资源。
    # end = time.time()
    # print("1:", end - start)  # 2.717

    # 采用多进程
    # pool = Pool(processes=2)
    # start2 = time.time()
    # r1 = pool.apply_async(countdown, [Count//2])
    # r2 = pool.apply_async(countdown, [Count//2])
    # pool.close()
    # pool.join()
    # end2 = time.time()
    # print("3:",end2-start2)  # 1.617

结果发现,采用多进程的确会好点。

标签:Count,__,python,代码,countdown,time,GIL,pool
来源: https://www.cnblogs.com/peixu/p/16339729.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有