Cpython的全局解释器锁(GIL)
# Cpyrhon解释器下有个全局解释器锁-GIL:在同一
# 在同一时刻,多线程中只有一个线程访问CPU
# 有了全局解释器锁(GIL)后,在同一时刻只能有一个线程访问CPU。
# 全局解释器锁锁的是线程,而不是数据。
# 这种全局解释器锁的特性就是同一时间只有有一个线程访问CPU,所以在多个CPU的情况下,也只有一个线程在一个时间点访问CPU,这是Cpython解释器的特性,这是一个不好的特性
# 到目前为止并没有一个解释器语言可以充分使用多个CPU,一个时间点只能一者访问CPU # 在多线程环境中,python虚拟机按一下方式执行访问CPU:
# 设置GIL
# 切换到一个线程去执行
# 运行指定数量的字节码指令或线程后主动让出控制(可以调用time.sleep())
# 把线程设置为睡眠状态
# 解决GIL
# 再次重复以上所有操作 # 高CPU: 在高CPU利用率的代码中,此时这种同一时刻只能有一个线程访问CPU机制会响应效率,如高计算类的代码中。如真遇到这种情况,可以用多进程,不用多线程处理
# 高IO:处理文件、处理web请求、爬取网页、设备文件、读写数据、send、recv,我们遇到的基本都是IO的,很少遇到计算类的东西 # 比较多线程与多进程的效率。多线程的执行效率会好些,在高IO的情况、和简单的计算类情况下
import time
from threading import Thread
from multiprocessing import Process def func(n):
n + 1 if __name__ == '__main__':
start = time.time()
t_lst = []
for i in range(100):
t = Thread(target=func, args=(i, ))
t_lst.append(t)
t.start() for t in t_lst:
t.join()
t1 = time.time() - start start2 = time.time()
p_lst = []
for i in range(100):
p = Process(target=func, args=(i, ))
p_lst.append(p)
p.start() for p in p_lst:
p.join()
t2 = time.time() - start2 print(t1, t2)
Cpython的全局解释器锁(GIL)的更多相关文章
- python 线程队列、线程池、全局解释器锁GIL
一.线程队列 队列特性:取一个值少一个,只能取一次,没有值的时候会阻塞,队列满了,也会阻塞 queue队列 :使用import queue,用法与进程Queue一样 queue is especial ...
- 全局解释器锁GIL
我们使用高并发,一次是创建1万个线程去修改一个数并打印结果看现象: from threading import Thread import os def func(args): global n n ...
- 全局解释器锁GIL & 线程锁
1.GIL锁(Global Interpreter Lock) Python代码的执行由Python虚拟机(也叫解释器主循环)来控制.Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行 ...
- python 什么是全局解释器锁GIL
什么是全局解释器锁GIL Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在 ...
- 并发编程——全局解释器锁GIL
1.全局解释器锁GIL GIL其实就是一把互斥锁(牺牲了效率但是保证了数据的安全). 线程是执行单位,但是不能直接运行,需要先拿到python解释器解释之后才能被cpu执行 同一时刻同一个进程内多个线 ...
- 21.线程,全局解释器锁(GIL)
import time from threading import Thread from multiprocessing import Process #计数的方式消耗系统资源 def two_hu ...
- Python核心技术与实战——十九|一起看看Python全局解释器锁GIL
我们在前面的几节课里讲了Python的并发编程的特性,也了解了多线程编程.事实上,Python的多线程有一个非常重要的话题——GIL(Global Interpreter Lock).我们今天就来讲一 ...
- Python如何规避全局解释器锁(GIL)带来的限制
编程语言分类概念介绍(编译型语言.解释型语言.静态类型语言.动态类型语言概念与区别) https://www.cnblogs.com/zhoug2020/p/5972262.html Python解释 ...
- Python全局解释器锁 -- GIL
首先强调背景: 1.GIL是什么?GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定. 2.每个CPU在同一时间只能 ...
随机推荐
- kinaba 安装踩坑: FATAL Error: [elasticsearch.url]: definition for this key is missing 转
安装 https://www.jianshu.com/p/875457cb8da6 操作系统:Linux kibana 版本: 7.4.0 1. 在/etc/yum.repos.d/ 下新建 ...
- spring boot:用dynamic-datasource-spring-boot-starter配置druid多数据源(spring boot 2.3.3)
一,dynamic-datasource-spring-boot-starter的用途? 1,dynamic-datasource-spring-boot-starter 是一个基于springboo ...
- net core 微服务框架 Viper 调用链路追踪
1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...
- python定义函数后跟->的意义
举例 def xxx(x) 后面跟着一个->数据类型 比如->int:(别忘了冒号) 作用很简单 挺流氓的 直接让函数返回值为这个类型 非常方(liu)便(mang)
- 想买保时捷的运维李先生学Java性能之 垃圾收集算法
前言 从原来只知道-Xms.-Xmx是设置内存的,到现在稍微理解了一些堆内存等Java虚拟机的一些知识.明白了技术这一个东西还是得要有输入才能实践,原理与实践要相辅相成,后续把JVM的监控好好总结一下 ...
- 老板下了死命令,要把日志系统切换到Logback
Log4j 介绍过了,SLF4J 也介绍过了,那接下来,你懂的,Logback 就要隆重地登场了,毕竟它哥仨有一个爹,那就是巨佬 Ceki Gulcu. 就在昨天,老板听我说完 Logback 有多牛 ...
- POJ2430 Lazy Cows
题意描述 Lazy Cows 给定一个 \(2\times b\) 的矩形,和 \(n\) 个矩形上的点. 要求你用 \(k\) 个矩形覆盖这 \(n\) 个点,使得每个点都被覆盖的前提下这些矩形的面 ...
- python开发基础(二)运算符以及数据类型之bool(布尔值))
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
- Centos7安 装python3+Selenium+chrome+chromedriver
Centos7安装python3+Selenium+chrome+chromedriver详细python2和python3共存,Selenium错误的处理更新Centos源 wget -O /etc ...
- MarkdownPad 2中编辑
一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 #######七级标题 ########八级标题 #!/bin/bash declare -i evenSum=0 declare -i i ...