cpython 解释器中存在一个GIL(全局解释器锁),无论多少个线程、多少颗cpu

他的作用就是保证同一时刻只有一个线程可以执行代码,因此造成了我们使用多线程的时候无法实现并行。

因为有GIL的存在、所以同一时刻只能有一个线程被CPU执行

任务:IO 密集型:可以采用多线程(多进程+协成)

计算密集型:python不适用

(1)IO 密集型、CPU会是实现自动切换 提高工作效率

def ListenMusic(name):print("beging listening to %s,%s" %(name,time.ctime()))time.sleep(5)print("end listening %s" % time.ctime())
def Recordlog(name):print("beging recoding to %s,%s" %(name,time.ctime()))time.sleep(5)print("end recoding %s" % time.ctime())
if __name__ == '__main__':threads=[]t1=threading.Thread(target=ListenMusic,args=("凤凰传奇",))t2=threading.Thread(target=Recordlog,args=("python多线程",))threads.append(t1)threads.append(t2)for t in threads:t.start()

(2) 计算密集型 cpu 一直处于工作状态、没有io流的切换、不适用多进程

import threading,time
def add():s=0for i in range(100000990):s +=iprint("累加的结果是:",s)
def mul():s1=1for i in range(1,10000):s1 *= iprint("累乘的结果是:",s1)
if __name__ == '__main__':start= time.time()L = []t1=threading.Thread(target=add)t2=threading.Thread(target=mul)L.append(t1)L.append(t2)for t in L:t.start()for t in L:t.join()print("总共花费时间",time.time()-start)

转载于:https://www.cnblogs.com/tsgxj/p/9251777.html

python GIL :全局解释器相关推荐

  1. Python GIL全局解释器锁

    目录 GIL全局解释器锁 一.引入: 二.GIL介绍 三.GIL与Lock 四.GIL与多线程 总结 GIL全局解释器锁 一.引入: 首先要明白,GIL并不是Python的一个特性,其实在我们通常所称 ...

  2. python GIL 全局解释器锁详解

    Python多线程另一个很重要的话题--GIL(Global Interpreter Lock,即全局解释器锁)鲜有人知,甚至连很多Python老司机都觉得GIL就是一个谜 一.一个不解之谜 耳听为虚 ...

  3. python GIL(全局解释器锁)

    python  C 解释器有一个叫GIL 的东西作用: 每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码. 所以在python中,如果对于CPU密集型任务,多线程是没有用的 ...

  4. python gil 解除_详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案

    先看一道GIL面试题: 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. GIL:又叫全局解 ...

  5. Python中的GIL(全局解释器锁)

    1. GIL全称Global Interpreter Lock,每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码. 2.GIL的缺点 GIL使Python不能充分利用多核心 ...

  6. python基础--GIL全局解释器锁、Event事件、信号量、死锁、递归锁

    ps:python解释器有很多种,最常见的就是C python解释器 GIL全局解释器锁: GIL本质上是一把互斥锁:将并发变成串行,牺牲效率保证了数据的安全 用来阻止同一个进程下的多个线程的同时执行 ...

  7. 【Python爬虫学习笔记11】Queue线程安全队列和GIL全局解释器锁

    Queue线程安全队列 在Python多线程编程中,虽然threading模块为我们提供了Lock类和Condition类借助锁机制来处理线程并发执行,但在实际开发中使用加锁和释放锁仍是一个经常性的且 ...

  8. Python高级——GIL全局解释器锁问题

    GIL全局解释器锁 GIL全局解释器锁是cpython解释器内部的一把锁,和python中的lock锁不是一个层面. GIL产生的背景:在cpython解释内部运行多个线程的时候,每个线程都需要解释器 ...

  9. python gil全局锁_什么是Python全局解释器锁(GIL)?

    python gil全局锁 The Python Global Interpreter Lock or GIL, in simple words, is a mutex (or a lock) tha ...

最新文章

  1. oracle 11.2.0.3 asm非rac双机,oracle11.2.0.4 rac asm启动故障
  2. Android webview 加载https网页显示空白
  3. 明科在线客服系统PHP_在线客服系统的标准功能有哪些
  4. 悉数11种主流NoSQL文档型数据库
  5. Django编写RESTful API(二):请求和响应
  6. 济南python工资一般多少-Python火到天际,可是为啥找工作这么难?
  7. Camera 花屏、分屏、卡屏,黑屏问题分析
  8. mysql简单人事管理系统_简易人事管理系统(pyqt5+mysql)
  9. Android——基本组件-2
  10. 【hadoop生态之Flume】概念【笔记+代码】
  11. 电子不停车收费系统(ETC)专题(1)——系统概述
  12. 八字易经算法之用JAVA实现完整排盘系统
  13. Oracle安装提示无效条目,oracle NET 无效条目,要求有效的“服务名”
  14. 冷启动问题——协同过滤(推荐系统)
  15. 基于WIFI无线组网的水雨情远程监测预警系统
  16. MySQL数据库—多表查询
  17. v1 中兴f450g_上海电信中兴F450G v2.0 改桥接
  18. [转]手机按键生产工艺简介
  19. GAMP_INS 从零开始实现PPP/INS紧组合(一)
  20. jvm crash分析

热门文章

  1. 前端学习 -- Css -- 伪元素
  2. VS2012经常使用的快捷方式完成最全面
  3. PHP获取客户端和服务器IP地址
  4. To be a true man
  5. HDU_1253 胜利大逃亡(BFS)
  6. matlab中.P文件的介绍
  7. C++求数组中的逆序对
  8. C++实现求数组中前K大的数
  9. smc数显压力表设定方法_SMC压力表使用注意与调试方法
  10. jittor和pytorch生成网络对比之dragan