问:为什么python中有了全局解释器锁GIL,还要有互斥锁?
首先我们在进行对比之前,我们要知道什么是全局解释器锁,和什么是互斥锁,他们分别是用来做什么的才能解决这个问题。
首先介绍全局解释解释器锁GIL,Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行。对Python 虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。从宏观微观上来说,GIL是宏观的操作。比如在一个4核的环境下,只有一个核是运行着线程,而其他三个核是空的。GIL是线程锁,针对线程,而不是进程。然而这些规则是Cpython给的,像Jpython就没有这个机制。
其中,在多线程的情况下,python虚拟机按以下方式执行:
2. 切换到一个线程去运行
3. 运行:
a. 指定数量的字节码指令,或者
4. 把线程设置为睡眠状态
5. 解锁GIL
6. 再次重复以上所有步骤
转载于:https://www.cnblogs.com/swearBM/p/9244011.html
问:为什么python中有了全局解释器锁GIL,还要有互斥锁?相关推荐
- java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)
前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...
- Linux内核中的同步原语:自旋锁,信号量,互斥锁,读写信号量,顺序锁
Linux内核中的同步原语 自旋锁,信号量,互斥锁,读写信号量,顺序锁 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 1. Linux 内核中的同步原 ...
- c语言中锁的作用,c 互斥锁
互斥锁的作用保护共享数据: 在并发机制的情况下,有时候会有多个线程同时访问同一片数据,为了保护数据操作的准确性就需要通过加锁来进行保护.保持操作互斥: 可能一个程序会有多个操作,但是同一个时间只能有一 ...
- 【Python核心】全局解释器锁GIL
Python多线程另一个很重要的话题--GIL(Global Interpreter Lock,即全局解释器锁)鲜有人知,甚至连很多Python老司机都觉得GIL就是一个谜 一.一个不解之谜 耳听为虚 ...
- 学习笔记(26):Python网络编程并发编程-GIL与自定义互斥锁的区别
立即学习:https://edu.csdn.net/course/play/24458/296443?utm_source=blogtoedu 1.GIL的基本概念 答:GIL本质上就是一把锁,只是他 ...
- 第十二节:深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁)
一. 整体介绍 温馨提示:内核模式锁,在不到万不得已的情况下,不要使用它,因为代价太大了,有很多种替代方案. 内核模式锁包括: ①:事件锁 ②:信号量 ③:互斥锁 ④:读写锁 ⑤:动态锁 二. 事件锁 ...
- 自旋锁:pthread_spinlock_t,互斥锁:pthread_mutex_t,条件变量:pthread_cond_t,读写锁:pthread_rwlock_t
Table of Contents pthread提供的锁 互斥锁 自旋锁 pthreadtypes.h nptl\sysdeps\unix\sysv\linux\i386\bits 44 ...
- 独占锁(写锁)/共享锁(读锁)/互斥锁
理论 独占锁:指该锁一次只能被一个线程所持有.对于ReentrantLock和Synchronized而言都是独占锁. 共享锁:该锁可以被多个线程所持有.对于ReentrantReadWriteLoc ...
- java的互斥锁_java基础之互斥锁初解
JDK中常用synchronized用于解决线程安全的问题,那么在JDK1.5的新特性中还提供了一个ReenTrantLock类用于解决线程安全问题,这个类就被称作为互斥锁. 假定我们有三个子线程协同 ...
最新文章
- POJ-1436 线段树 区间更新
- 搭建一个通用的脚手架
- 使用多级分组报表展现分类数据
- nginx http proxy 正向代理
- Java中三种Set的实现类的用法和区别
- C# ActionT和 FuncT委托
- 错误记录(一)Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister报错解决办法
- SharePoint 2010整体进行验证
- c+命名空间_了解C ++中的命名空间
- 计算机蓝屏代码0x0000007b,蓝屏代码0X0000007B各机型解决方法及原因
- Mysql 免安装配置
- 使用Ballerina CLI工具开发Ballerina项目
- 世界最早投入运行的计算机网络是,世界上最早投入运行的计算机网络是。
- python 保存数据为excel
- 25个超酷手绘插图的网站设计
- 【BZOJ4372】—烁烁的游戏(动态点分治)
- 2022焊工(高级)培训试题及答案
- Google Play国内应用市场发布版本步骤指导
- 陈浩的博客 --大牛啊
- 【Python小竞赛】ARIMA算法预测三日后招商银行收盘价
热门文章
- 前端开发基础知识整理--web综合篇
- 如何学习ReactJS:初学者完整指南
- 数据库字段与属性的关系是什么?
- python人脸识别教程_50行Python代码+OpenCV实现人脸识别!史上最详细的教程!
- Java教程:Java字符串替换实例
- mysql远程访问授权命令_mysql远程访问授权
- 下列哪个适合做链栈_外贸企业如何做Google推广?自然排名和付费广告哪个更适合你?...
- smote算法_SMOTE过采样框架+逻辑回归模型案例
- mysql 大量数据 更改索引_MySql——来自狂神说Java - 贤贤贤sir
- 华文行楷字帖欣赏_田英章硬笔行书字帖欣赏,600个行书笔法演示,写好字的首选帖...