Python 线程和进程
一、什么是线程
1、线程是操作系统能够进行运算调度的最小单位。它被包含在进程中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。每个进程至少包含一个线程.
二、什么是进程
1、一个进程就是一个程序的实例,每个进程里面都包含了执行这个程序的资源。
2、虚拟内存地址,执行的代码,打开的句柄,连接操作系统的接口,用户id,独立的进程号,环境变量,优先级,最大最小的空间大小,和至少一个线程,每一个进程默认启动时候是有一个主线程的,主线程又可以创建新的线程。
三、进程与线程的区别
1、线程共享内存数据。
2、线程可以访问进程中所有的数据。
3、可以直接和其它线程进行通讯,但是两个进程之间通信必须通过第三方。
4、进程有自己独立的内存空间
5、一个进程可以产生一个子进程但是和子进程之间也无法直接进行数据访问。
6、父进程要产生子进程需要将自己克隆一份。
7、同一个进程中的其它线程是可以互相交互的,而一个进程对其子进程只能由控制作用。
8、对主线程的修改有可能会影响其它的线程
四、python GIL
1、无论你启多少个线程,你有多少个cpu,Python在执行的时候会淡定的在同时只允许一个线程运行(因为加了gil锁)。
2、首先需要明确一点是gil并不是python的特性,它是在实现Python解释器(CPython)时所引入的一个概念,就好比C++是一套语言标准,但是可以用不同的编译器来编译成可执行代码。有名的解释器例如GCC,INTEL C++,Visual C++等,Python也一样,同样一段代码可以通过CPython,PyPy,Psyco等不同的Python执行环境来执行。像其中的JPython就没有GIL。然而因为CPython是大部分环境下默认的Python执行环境。所以在很多人的概念里CPython就是Python,也就想当然的把GIL归结为Python语言的缺陷。所以这里有一个概念:GIL并不是Python的特性,Python完全可以不依赖于GIL.