zoukankan      html  css  js  c++  java
  • python 并发专题(十一):基础部分补充(三)线程

    1. 背景

    • 理论上来说:单个进程的多线程可以利用多核.

    • 但是,开发Cpython解释器的程序员,给进入解释器的线程加了锁.

    2. 加锁的原因:

    1. 当时都是单核时代,而且cpu价格非常贵.

    2. 如果不加全局解释器锁, 开发Cpython解释器的程序员就会在源码内部各种主动加锁,解锁,非常麻烦,各种死锁现象等等.为了省事儿,直接进入解释器时给线程加一个锁.

    3. 优缺点:

      优点: 保证了Cpython解释器的数据资源的安全.
      缺点: 单个进程的多线程不能利用多核.

    4. Jpython没有GIL锁,pypy也没有GIL锁

    5. 现在多核时代, 我将Cpython的GIL锁去掉行么?

      因为Cpython解释器所有的业务逻辑都是围绕着单个线程实现的,去掉这个GIL锁,几乎不可能.

    6. 单个进程的多线程可以并发,但是不能利用多核,不能并行,多个进程可以并发,并行.

    3. GIL与Lock锁的区别

    • 相同点: 都是同种锁,互斥锁.
    • 不同点:
      GIL锁全局解释器锁,保护解释器内部的资源数据的安全.
      GIL锁 上锁,释放无需手动操作.
      自己代码中定义的互斥锁保护进程线程中的资源数据的安全.
      自己定义的互斥锁必须自己手动上锁,释放锁.

    4. 为什么GIL保证不了自己数据的安全?

      • 一个线程去修改一个数据的时候,由于网络延迟或者其它原因,被另一个线程抢到GIL锁,拿到这个数据,此时就造成了该数据的不安全。

  • 相关阅读:
    jdk环境变量配置(默认安装在c盘下)
    Less使用笔记
    Bootstrap4元素显示和隐藏
    npm常见命令及参数用法
    详解:cssrem插件 -- VS Code px转rem神器
    关于position:fixed的注意点
    解决:无法push到远程仓储
    解决:'git' 不是内部或外部命令,也不是可运行的程序
    小程序3-地图定位2
    转-前端开发流程
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12796554.html
Copyright © 2011-2022 走看看