浅谈 进程、线程和协程的区别和联系
本章围绕的主题是 进程、线程和协程 在中高级的面试中基本上都会被问到,接下来就分析讲解一下其中的区别和联系
一、进程
这个词对于程序员来说在熟悉不过了,在工作中总会说到多开几个脚本程序来跑,为的是加快任务的执行效率和处理速度
每次执行一个程序脚本系统都会在内存空间内形成一个独立内存体(俗称给程序分配内存),这个内存体有自己独立的地址空间和自己的堆,上级挂靠单位是操作系统,操作系统会以进程为单位分配系统资源,进程是系统资源分配的最小单位。
二、线程
这个词在信息采取抓取的时候也会时常听到,例如利用Python语言来实现多线程爬虫
首先我们先弄明白线程是什么?线程会被称为轻量级进程(Lightweight Process,LWP),是操作系统调度(CPU调度)执行的最小单位。
三、进程和线程的区别与联系
区别:
1、进程是系统资源分配的最小单位(基础单位);线程是系统调度和分配的最小单位(基础单位)
2、进程之间可以并发执行,在同一个进程下的多个线程也可以并发执行
3、进程是拥有资源的一个独立单位,线程不拥有资源,但是可以访问隶属于进程的资源
4、在创建和撤销进程时。系统会对资源进行分配和回收,开销要大于线程,但是进程有自己的独立地址空间,一个进程崩溃后,在保护模式下不会对其他进程造成影响;而线程只是一个进程中的不同执行路径,线程有自己的堆栈和局部变量,但是没有自己的独立地址空间,当一个线程挂掉的时候其他线程也会挂掉受到影响(诛九族);所以收多进程程序要比多线程程序健壮,但是进程切换的时候资源耗费较大,效率要差一些
联系:
1、一个线程只属于一个进程,一个进程可以有多个线程,但至少有一个线程
2、资源分配给进程,同一进程下的所有线程共享进程所有资源
3、处理机分给线程,真正在处理机上运行的是线程
4、线程在执行过程中,需要协作同步,不同进程的线程要利用消息通信的办法实现同步
四、协程
协程,是一种比线程更加轻量级的存在,协程不被操作系统内核所管理,而是完全由程序所控制,这样带来的好处是性能得到了大幅度提成,不会像线程切换那样消耗资源
协程的特点在于是一个线程执行,那和多线程比,协程有何优势?
1、协程切换是由程序自身控制的,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势越明显
2、不需要多线程的锁机制:因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多
参考图:
引用:https://blog.csdn.net/daaikuaichuan/article/details/82951084