进程
是什么:
1、计算机系统进行资源分配和调度的基本单位,是应用程序运行的载体,更好的理解就是电脑的任务管理器,下图中每个都是一个进程。
2、每个CPU同一时间只能处理一个进程,那为什么还能同时处理上面的那么多进程,实际上是CPU用很快的速度切换不同的进程。(举个例子:你一个人单挑100个人,你要么就一个打完打下一个。要么就是你一个人“同时”打100个人。当你速度足够快时,你瞬闪到每个人面前打一拳,有的人还被你打了3-4拳,瞬间3轮过后,100个人倒下了。在普通人面前,就觉得你同时击倒了100人。但其实说严格点,你还是一个一个击倒的。)进程之间的切换还会有一个问题,开销很大。
3、任务调度采用的是时间片轮转的抢占式调度方式。
4、进程切换的条件是:进程执行完毕、分配给进程的cpu时间片结束,系统发生中断需要处理,或者进程等待必要的资源(进程阻塞),阻塞的话程序还有其他可以执行的地方,不一定要等待,所以就有了线程。
线程(由内核管理和调度)
是什么:
1、一个进程可以有多个线程,多个线程共享进程的内存空间。
2、任务调度采用的是时间片轮转的抢占式调度方式。
进程与线程的区别
1、线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
2、一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
3、进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
4、调度和切换:线程上下文切换比进程上下文切换要快得多。
作者:一入码坑深似海
链接:https://www.jianshu.com/p/80bde972196d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
协程(由程序员自己写程序来管理调度的,对于内核不可见,也叫用户空间线程)
协程的目的:如果说每个请求占用一个线程去完成完整的业务逻辑,系统的吞吐能力取决于每个线程的操作耗时,如果遇到很耗时的I/0行为,整个系统的吞吐就会立刻下降,这个时候线程就会处于阻塞状态,如果线程很多,就会存在很多线程处于空闲状态(等该线程执行完才能执行),就会造成资源应用不彻底。最常见的就是数据库操作(它是同步阻塞的),这里的耗时其实是让CPU一直在等待I/O返回,其实在这种情况下线程根本没有利用CPU去做运算,而是处于空转状态。协程的目的就是当出现长时间的I/O操作时,通过让出目前的协程调度,执行下一个任务。
协程的特点:
1、协同,因为是由程序员自己写的调度策略,其通过协作而不是抢占来进行切换
2、在用户态完成创建,切换和销毁
3、* ⚠️ 从编程角度上看,协程的思想本质上就是控制流的主动让出(yield)和恢复(resume)机制*