首先我们在进行对比之前,我们要知道什么是全局解释器锁,和什么是互斥锁,他们分别是用来做什么的才能解决这个问题。

  

  首先介绍全局解释解释器锁GIL,Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行。对Python 虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。从宏观微观上来说,GIL是宏观的操作。比如在一个4核的环境下,只有一个核是运行着线程,而其他三个核是空的。GIL是线程锁,针对线程,而不是进程。然而这些规则是Cpython给的,像Jpython就没有这个机制。

  其中,在多线程的情况下,python虚拟机按以下方式执行:

1. 设置GIL
  2. 切换到一个线程去运行
  3. 运行:
      a. 指定数量的字节码指令,或者
b. 线程主动让出控制(可以调用time.sleep(0))
  4. 把线程设置为睡眠状态
  5. 解锁GIL
  6. 再次重复以上所有步骤
接下来是互斥锁:个线程要共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进入写入操作,从而保证了多线程情况下数据的正确性。互斥锁体现的就是一个同步的机制,即该线程释放资源就是一个条件,条件完成,才能执行下一步操作。是微观的操作。
好像,这样就能说明两者的区别了。。。后续补充--

转载于:https://www.cnblogs.com/swearBM/p/9244011.html

问:为什么python中有了全局解释器锁GIL,还要有互斥锁?相关推荐

  1. java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)

    前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...

  2. Linux内核中的同步原语:自旋锁,信号量,互斥锁,读写信号量,顺序锁

    Linux内核中的同步原语 自旋锁,信号量,互斥锁,读写信号量,顺序锁 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 1. Linux 内核中的同步原 ...

  3. c语言中锁的作用,c 互斥锁

    互斥锁的作用保护共享数据: 在并发机制的情况下,有时候会有多个线程同时访问同一片数据,为了保护数据操作的准确性就需要通过加锁来进行保护.保持操作互斥: 可能一个程序会有多个操作,但是同一个时间只能有一 ...

  4. 【Python核心】全局解释器锁GIL

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

  5. 学习笔记(26):Python网络编程并发编程-GIL与自定义互斥锁的区别

    立即学习:https://edu.csdn.net/course/play/24458/296443?utm_source=blogtoedu 1.GIL的基本概念 答:GIL本质上就是一把锁,只是他 ...

  6. 第十二节:深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁)

    一. 整体介绍 温馨提示:内核模式锁,在不到万不得已的情况下,不要使用它,因为代价太大了,有很多种替代方案. 内核模式锁包括: ①:事件锁 ②:信号量 ③:互斥锁 ④:读写锁 ⑤:动态锁 二. 事件锁 ...

  7. 自旋锁: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 ...

  8. 独占锁(写锁)/共享锁(读锁)/互斥锁

    理论 独占锁:指该锁一次只能被一个线程所持有.对于ReentrantLock和Synchronized而言都是独占锁. 共享锁:该锁可以被多个线程所持有.对于ReentrantReadWriteLoc ...

  9. java的互斥锁_java基础之互斥锁初解

    JDK中常用synchronized用于解决线程安全的问题,那么在JDK1.5的新特性中还提供了一个ReenTrantLock类用于解决线程安全问题,这个类就被称作为互斥锁. 假定我们有三个子线程协同 ...

最新文章

  1. POJ-1436 线段树 区间更新
  2. 搭建一个通用的脚手架
  3. 使用多级分组报表展现分类数据
  4. nginx http proxy 正向代理
  5. Java中三种Set的实现类的用法和区别
  6. C# ActionT和 FuncT委托
  7. 错误记录(一)Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister报错解决办法
  8. SharePoint 2010整体进行验证
  9. c+命名空间_了解C ++中的命名空间
  10. 计算机蓝屏代码0x0000007b,蓝屏代码0X0000007B各机型解决方法及原因
  11. Mysql 免安装配置
  12. 使用Ballerina CLI工具开发Ballerina项目
  13. 世界最早投入运行的计算机网络是,世界上最早投入运行的计算机网络是。
  14. python 保存数据为excel
  15. 25个超酷手绘插图的网站设计
  16. 【BZOJ4372】—烁烁的游戏(动态点分治)
  17. 2022焊工(高级)培训试题及答案
  18. Google Play国内应用市场发布版本步骤指导
  19. 陈浩的博客 --大牛啊
  20. 【Python小竞赛】ARIMA算法预测三日后招商银行收盘价

热门文章

  1. 前端开发基础知识整理--web综合篇
  2. 如何学习ReactJS:初学者完整指南
  3. 数据库字段与属性的关系是什么?
  4. python人脸识别教程_50行Python代码+OpenCV实现人脸识别!史上最详细的教程!
  5. Java教程:Java字符串替换实例
  6. mysql远程访问授权命令_mysql远程访问授权
  7. 下列哪个适合做链栈_外贸企业如何做Google推广?自然排名和付费广告哪个更适合你?...
  8. smote算法_SMOTE过采样框架+逻辑回归模型案例
  9. mysql 大量数据 更改索引_MySql——来自狂神说Java - 贤贤贤sir
  10. 华文行楷字帖欣赏_田英章硬笔行书字帖欣赏,600个行书笔法演示,写好字的首选帖...