zoukankan      html  css  js  c++  java
  • GIL锁

    Python GIL锁

    在Cpython解释器中有一把GIL锁(全局解释器锁),GIl锁本质是一把互斥锁。
    导致了同一个进程下,同一时间只能运行一个线程,无法利用多核优势.
    同一个进程下多个线程只能实现并发不能实现并行.

    为什么要有GIL?

    因为cpython自带的垃圾回收机制不是线程安全的,所以要有GIL锁.
    导致了同一个进程下,同一时间只能运行一个线程,无法利用多核优势.
    分析:我们有四个任务需要处理,处理方式肯定是要玩出并发的效果,解决方案可以是:
    方案一:开启四个进程
    方案二:一个进程下,开启四个线程

    计算密集型 推荐使用多进程

    每个都要计算10s
    多线程
    在同一时刻只有一个线程会被执行,也就意味着每个10s都不能省,分开每个都要计算10s,共40.ns
    多进程
    可以并行的执行多个线程,10s+开启进程的时间

    io密集型 推荐多线程

    4个任务每个任务90%大部分时间都在io.
    每个任务io10s 0.5s
    多线程
    可以实现并发,每个线程io的时间不咋占用cpu, 10s + 4个任务的计算时间
    多进程
    可以实现并行,10s+1个任务执行的时间+开进程的时间

  • 相关阅读:
    php提示undefined index的几种解决方法
    划分树(poj2104)
    ACM-ICPC 2018 南京赛区网络预赛B
    AC Challenge(状压dp)
    UVALive5966(bfs)
    UVALive
    STL next_permutation 算法原理和实现
    凸包算法
    poj1873(枚举+凸包)
    CodeForces
  • 原文地址:https://www.cnblogs.com/ledgua/p/11552227.html
Copyright © 2011-2022 走看看