线程和进程
线程:线程是操作系统能够进行运算调度的最小单位。进程被包含在进程中,是进程中实际处理单位。一条线程就是一堆指令集合。
一条线程是指进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
优点:共享内存,I/O操作时候,创造并发操作
缺点:抢占资源(相当于建人)
进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
优点:同事利用多个CPU,能够同时进行多个操作
缺点:耗费资源(重新开辟内存空间相当于建房子)
进程不是越多越好,CPU个数 == 进程个数
线程也不是越多越好,具体案例具体分析,请求上下文切换耗时
进程和线程的目的:提高执行效率
计算机最小的任务执行单元:线程
I/O操作不占用CPU时间:
1、I/O密集型(不用CPU)---》多线程
2、计算机密集型(用CPU)-----》多进程
3、存在大量且不需要CPU操作时------》协程
GIL限制:在同一时刻,只能有一个线程进入CPython解释器。
python的进程上有个GIL 全局解释性锁,这个会造成,一个进程的多个线程,不能同时使用多个cpu,而是cpu每次只能选一个线程执行,因此,多线程在cpu执行的是无效的。但是在I/O操作的时候是可以同步的,比如time.sleep就是io 操作,多线程,可以同时等待
进程和程序关系
进程:程序实例 程序子集 有所谓生命周期,可以kill叼 比如你安装的word 是一个程序 ,你打开一个文档是一个进程,可以关掉。
进程要想完成并发执行的功能就要进程切换
进程切换 ,上下文切换,进程运行,说明在cpu的寄存器里面有数据了。假如5条数据现在有两条,就切换了,现在要保存现场,回来时候 要恢复现场。如果机器上有几千个进程,会切换 上万个切换需要时间,进程切换时监控程序来完成的,也就是内核,消耗时间
正常程序执行空间是用户空间,
占用在内核,说明大量时间消耗到进程切换。不好。