zoukankan      html  css  js  c++  java
  • Python GIL锁

    Cpython进程与其运行文件所产生的主进程是一个进程(文件进程相当于Cpython的一个线程)
    线程的特点是数据资源是共享的,而多个线程又都要共享Cpython的解释权限,共享意味着竞争,有竞争数据就不安全,
    所以Cpython的GIL锁(Cpython的一个线程)
    就产生了,根本作用是,当python文件中的线程想要执行其代码,必须获得GIL权限,否则不能执行,
    所以cpu的多核优势也没有了,除非多开Cpython解释器或多进程,否则同时只能运行一个线程




    一个工人相当于cpu,此时计算相当于工人在干活,I/O阻塞相当于为工人干活提供所需原材料的过程,工人干活的过程中如果没有原材料了,则工人干活的过程需要停止,直到等待原材料的到来。

    如果你的工厂干的大多数任务都要有准备原材料的过程(I/O密集型),那么你有再多的工人,意义也不大,还不如一个人,在等材料的过程中让工人去干别的活,

    反过来讲,如果你的工厂原材料都齐全,那当然是工人越多,效率越高

    结论:

      对计算来说,cpu越多越好,但是对于I/O来说,再多的cpu也没用

      当然对运行一个程序来说,随着cpu的增多执行效率肯定会有所提高(不管提高幅度多大,总会有所提高),这是因为一个程序基本上不会是纯计算或者纯I/O,所以我们只能相对的去看一个程序到底是计算密集型还是I/O密集型,从而进一步分析python的多线程到底有无用武之地。

    多线程用于IO密集型,如socket,爬虫,web
    多进程用于计算密集型,如金融分析

  • 相关阅读:
    P4178 Tree
    CF437D The Child and Zoo
    CF1032G Chattering ST表+倍增
    P4165 [SCOI2007]组队 推柿子+差分
    P1450 [HAOI2008]硬币购物 容斥原理+完全背包
    P6275 [USACO20OPEN]Sprinklers 2: Return of the Alfalfa P 轮廓线DP
    P6009 [USACO20JAN]Non-Decreasing Subsequences P 矩阵优化DP
    P2605 [ZJOI2010]基站选址 线段树优化DP
    P5597 【XR-4】复读 思维题 +二叉树合并
    P5304 [GXOI/GZOI2019]旅行者 最短路+位运算优化
  • 原文地址:https://www.cnblogs.com/GeorgeJ/p/11457684.html
Copyright © 2011-2022 走看看