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的原生线程执行完毕将结果返回,但是返回的结果就不一定一一对应了。所以就必须使用一个工具来限制线程的执行,使得能够保证数据据结果的准确性。

 

posted @ 2018-08-01 15:40  zxh_python  阅读(124)  评论(0编辑  收藏  举报