【python】关于python的全局解释锁GIL及线程问题

来源:互联网 发布:指定数据库所有者 编辑:程序博客网 时间:2024/05/30 22:51

在讲全局解释锁之前,我们需要先明白 线程 进程的概念。
在进程中有一个或者多个线程。每个进程具有自己的地址空间,内存,数据栈及其它数据。线程有开始、顺序执行和结束部分。线程是cpu调动的,没有自己的资源,所有线程都共享同一进程中的资源。

线程锁:
CPU执行任务时,在线程之间是进行随机调度的,并且每个线程可能只执行n条代码后就转而执行另外一条线程。由于在一个进程中的多个线程之间是共享资源和数据的,这就容易造成资源抢夺或脏数据,于是就有了锁的概念,限制某一时刻只有一个线程能访问某个指定的数据。

为了解决不同线程同时访问统一资源时,数据保护问题,而产生了GIL.
python因为GIL的问题广受诟病,因为它在解释器的层面限制了程序在同一时间只有一个线程被CPU实际执行,而不管你的程序里实际开了多少条线程。所以我们经常能发现,python中的多线程编程有时候效率还不如单线程,就是因为这个原因。

所以在python中并不推荐多线程,而是推荐多进程。
另外 计算密集型推荐多进程,i/o密集型推荐多线程。也是因为防止同一资源占用情况。

0 0
原创粉丝点击