有了进程为什么要有线程?
- 一个进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了。
- 进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行。
进程是资源分配的最小单位,线程是CPU调度的最小单位,每一个进程中至少有一个线程。
线程的运行会比进程的快,且 CPU 在线程之间切换 比 在进程之间切换要快,因为线程是直接被 CPU 调用的
通俗理解进程和线程:
- 对于一个人来说一个人就是一个进程,一个人可以做的多件事情而每一件事都是一个线程
- 进程就是一个正在运行的程序,一个程序中有很多功能而每一个功能就是一个线程,而这些功能(线程)都给可以直接调用程序(进程)中的数据
线程是不能独立存在的,一定是存在进程中的,且一个进程里面可以有多个线程
_files/827651-20180118212223115-85632065.png)
进程是负责数据的存储,而线程负责调用和处理这些数据,且多个线程共享(使用)同一个进程的地址空间中的资源
进程就好比如是类,因为他存储着数据,而线程就好比如是类中的方法,因为他可以调用类中的属性
_files/827651-20180118212223115-8563206.png)
多个线程同一时间修改进程的同一个数据的时候,就有可能导致数据不安全,此时cpython解析器会给线程上了一把GIL锁(全局解析器锁),这样就导致了同一时间只能有一个线程访问cpu,且这时数据除特殊情况外是安全的