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在同一时间只能 ...
随机推荐
- git的一些操作命令
一,如何修改一个commit的注释? root@kubuntu:/data/git/clog# git commit --amend 说明:架构森林是一个专注架构的博客,地址:https://www. ...
- JS 身份证号码验证
function checkIdcard(idcard) { var Errors = new Array( "验证通过!", "身份证号码位数不对!", &q ...
- poj1655 Balancing Act (dp? dfs?)
Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14247 Accepted: 6026 De ...
- scott lock
账户被锁: cmd --->sqlplus /nolog--->conn sys/change_on_install as sysdba;---->alter user scott ...
- RxJava用法
首先导入依赖: implementation 'io.reactivex.rxjava2:rxjava:2.2.9'implementation 'io.reactivex.rxjava2:rxand ...
- SQL Server 列存储索引 第三篇:维护
列存储索引分为两种类型:聚集的列存储索引和非聚集的列存储索引,在一个表上只能创建一个聚集索引,要么是聚集的列存储索引,要么是聚集的行存储索引,然而一个表上可以创建多个非聚集索引. 一,创建列存储索引 ...
- 如何学习C语言
总结学习 C 语言的几个步骤,其他编程语言基本类似. 看书 学习一门编程语言少不了先学习基本语法. C语言的语法也就是变量,数组.指针.表达式.逻辑操作.函数,宏定义等等.学习这些先买一本入门级书籍, ...
- mshadow入门指南
mshadow是一个基于表达式模板实现的张量库,在MXNet框架中被广泛使用.这篇文章简单介绍了mshadow的基本用法和特性,文章主要翻译自mshadow/guide/README. 张量数据结构 ...
- 机器学习 第5篇:knn回归
基于最邻近算法的分类,本质上是对离散的数据标签进行预测,实际上,最邻近算法也可以用于对连续的数据标签进行预测,这种方法叫做基于最邻近数据的回归,预测的值(即数据的标签)是连续值,通过计算数据点最临近数 ...
- 请教:Effective Java 第120页,代码运行未重现报错
在阅读<Effective Java 第二版>时,尝试编写重现第120页问题,发现未重现报错信息,可以正常运行并输出结果.有知道原因的请在评论中留言指导一下,谢谢!!! 问题如下