zoukankan      html  css  js  c++  java
  • GIL锁

    1.关于在单核CPU与多核CPU中,线程的执行问题?

    当接触到了多线程,就不免的要设计到CPU,因为线程是需要获得CPU的准许指令(由CPU来调度)之后,才可以执行任务。那么在单核CPU中,在某一时刻时,是只有一个线程在执行任务。在多核CPU中,就有多个线程在执行任务。

    2.单核CPU中的‘假’并行

    对于线程执行问题,就要涉及到并发与并行问题,具体的解释,我在前面的文章中提到了。如果CPU是单核的,当存在10个线程同时启动时,看上去都在执行。其实在某一时刻,只有一个线程被允许执行,由于线程间的切换太快,导致10个线程看上去都在执行,给人一种并行的感觉,其实是假的并行。

    3.多核CPU内的真并行

    经过科技大佬们的不懈努力,单核CPU已经不能够满足日益所需了,于是多核CPU被创造出来。在同一时刻可以多个线程同时执行任务,从而大大的提高效率。那么,在PYthon内,多核也可以实现并行嘛?

    4.在PYthon中的多核可以实现吗?

    当然是不可以的,无论是4核,8核,都不允许同时执行的发生。在同一时间,永远都只有一个线程在执行,所以Python中的多线程其实都是假线程。

    5.GIL(全局解释器锁)

    无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行

    6.GIL锁的存在意义

    由于Python被研发时的一个缺陷,导致不得不在线程中使用GIL锁。Python的底层语言是C语言,Python的解释器是CPython。在线程执行时,是调用原生线程来执行,也就是调用底层语言C语言来提供接口,于是,缺陷就产生了,Python解释器无法越界管理C语言的线程,那么在多线程并行执行时,内部的原生线程执行是无法进行管理的,Python的线程只能进行等待,等待C的原生线程执行完毕将结果返回,但是返回的结果就不一定一一对应了。所以就必须使用一个工具来限制线程的执行,使得能够保证数据据结果的准确性。

  • 相关阅读:
    android 控件: xml 设置 Button 按下背景
    Hadoop: the definitive guide 第三版 拾遗 第四章
    二进制日志占满空间
    Unity3d学习笔记记录
    百度地图api---实现新建地图
    php简单浏览目录内容
    CRC校验的实现
    Android记录3--ExpandableListView使用+获取SIM卡状态信息
    Zookeeper Api(java)入门与应用(转)
    ZooKeeper程序员指南(转)
  • 原文地址:https://www.cnblogs.com/zxh1297/p/9401597.html
Copyright © 2011-2022 走看看