GIL理解

来源:互联网 发布:行楷字帖谁的好 知乎 编辑:程序博客网 时间:2024/06/07 10:34

1. python自身未实现底层的线程操作,无法自行调度CPU

由于采用的是系统原生的线程,同时需要将线程纳入自身,为了保证自身独立,自身加锁GIL

内部线程属于自身属性,自身抢占CUP才能进一步分配内部线程,python本身可以看做是一个单线程

多核可同步执行多条线程,但不能同时执行同一个线程,python一次只能运行在一个CPU中

内部多线程也只能运行在该CPU上


2. 本身相当于一个抽象CPU

其他语言实现了底层多线程操作,每条线程可抢占CPU执行,线程执行完毕归于己身,本身就是多线程

python借由原生线程,先进行归类,容纳己身,是python单线程下的多线程,只有这样,python自身才能调度多线程

只有python自身抢占到CPU,内部多线程才能得到执行

因此,python相当于一个特殊的,只处理自身事务的抽象的CPU

只有抢占到执行,才会成为实际工作的CPU,且只能存在一个,且只处理自身内部线程


3. 穷人模型

土豪(实现多线程)家中锅灶多(CPU),孩子吃饭(执行)随便守(多核运行)

屌丝(python)家中无锅灶,借用锅灶(CPU)做饭吃(执行),担心孩子被拐跑(无法实现统一调度管理),一个锅灶(CPU),一人一口(自家调度)

原创粉丝点击