python 中的互赤锁是否有必要?

Posted yvlicai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 中的互赤锁是否有必要?相关的知识,希望对你有一定的参考价值。

 

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

  

  首先介绍全局解释解释器锁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. 再次重复以上所有步骤
 
 
  接下来是互斥锁:个线程要共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进入写入操作,从而保证了多线程情况下数据的正确性。互斥锁体现的就是一个同步的机制,即该线程释放资源就是一个条件,条件完成,才能执行下一步操作。是微观的操作。
  好像,这样就能说明两者的区别了。。。后续补充--






以上是关于python 中的互赤锁是否有必要?的主要内容,如果未能解决你的问题,请参考以下文章

用python怎么实现json和xml的互转

Python返回是不是总是必要的[重复]

python使用matplotlib可视化使用xcorr函数可视化两个变量的互相关图使用acorr函数可视化自相关图像

Python每日一练——数据存储第二关:XML文档和字典的互转

在带有 sqlite 的 Python 中是不是有必要关闭游标?

Python面试必考重点之数据存储第二关——XML文档和字典的互转