教你打开线程、进程和协程的大门!
进程和线程是什么 进程和线程有什么区别 为什么有了进程又出现线程 内核态和用户态有啥不同 协程有什么特点

进程和线程

切换成本低:用户空间自己维护,不用走操作系统的调度 管理开销小:创建和销毁不用系统调用,系统调用所造成的上下文切换下文会讲解
与内核沟通成本大:因为这种线程大部分时间在用户空间,如果进行 IO 操作,很难利用内核的优势,且需要频繁的用户态和内核态的切换 线程之间的协作麻烦:想象两个线程 A 和 B 需要通信,通信通常会涉及到 IO 操作,IO 操作涉及到系统调用,系统调用又要发生用户态和内核套的切换成本,难 操作系统无法针对线程的调度进行优化:如果一个进程的用户态线程阻塞了操作系统无法及时的发现和处理阻塞问题,它不会切换其他线程从而造成浪费
操作系统级优化:内核中的线程即使执行 IO 操作也不需要进行系统调用,一个内核阻塞可以让其他立即执行 充分利用多核优势:内核权限足够高,可以在多个 CPU 核心执行内核线程
创建成本比较高:创建的时候需要使用系统调用即切换到内核态 切换成本高:切换的时候需要进行内核操作 扩展性差:因为一个内核管理,坑位有限,不可能数量太多




进程如果只有一个线程,那么认为进程就是线程 如果进程有多个线程,那么多个线程会共享相同的虚拟内存和全局变量等资源,上下文的切换不会影响这些资源 线程拥有自己的私有数据比如栈和寄存器,上下文切换的时候需要提前保存
两个线程不属于同一个进程,那么资源不共享,所以切换过程就会涉及到进程的上下文切换 第二种情况即两个线程属于同一个进程。因为共享虚拟内存,所以切换的时候这些资源保持不动,只需要切换线程的私有数据等不共享的数据


就绪状态:进程创建好了会开始排队,这个时候叫做“就绪状态” 运行状态:当一切准备就绪,天时地利人和后开始执行,此时为“运行状态” 如果将时间片用完了会再次变为就绪状态


就绪状态( Ready ):可运行,只不过其他进程在运行暂时停止 运行( Running):此时进程占用 CPU 阻塞状态( blo ck ): 此时可能因为等待相关事件(请求 IO/等待 IO 完成等) 而停止运行,此时即使把 CPU 控制权给它,仍然无法运行
创建状态 ( New ):进程刚被创建还没有提交时的状态,主要功能为分配和建立进程控制块等初始化工作。创建进程有两个阶段,第一个阶段为为新的进程创建必要的管理信息。第二个阶段为让进程进入就绪状态 终止状态 ( Exit ):进程退出的状态,即回收除了进程控制块以外的资源。也分为两个阶段,第一个阶段为等待操作系统进行善后处理,第二个阶段为释放主存

Null---->创建状态:最初创建的第一个状态 创建状态----->就绪状态:进行一些列的初始化称为就绪状态 就绪状态----->运行状态:当操作系统调度就绪状态的进程并分配给 CPU 变为运行状态 运行状态------>结束状态:当进程完成相应任务或出错则被操作系统结束的状态 运行状态------>阻塞状态:运行状态的进程由于时间片用完,操作系统将进程更改为就绪状态 阻塞状态------->就绪状态:阻塞状态的进程等待某事件结束进入就绪状态
挂起是一种行为,而阻塞是进程的状态 导致进程挂起的原因通常是因为内存不足或者用户的请求,进程的修改等,而进程的阻塞是进程正在等待某个事件发生,可能是等待资源或响应 挂起对应的是行为的激活,将外存中的进程掉入内存中,而处于阻塞状态的进程需要等待其他进程或系统唤醒 挂起属于被动行为,进程被迫从内存转移到外存,而进入阻塞为主动的行为

进程与线程的底层原理

资源信息
内存布局
栈:系统自动分配释放,平时经常使用的函数参数值,局部变量,返回地址等就在此 堆:存放动态分配的数据,通常由开发人员自行管理,如果开发人员使用后不释放,那么程序结束后可能会被操作系统收回 数据段:存放的是全局变量和静态变量。其中初始化数据段(.data)存放显示初始化的全局变量和静态变量,未初始化数据段,此段通常也被称为BSS段(.bss),存放未进行显示初始化的全局变量和静态变量。

描述信息

操作系统感知到有个进程需要切换,先发出一个中断信号给 CPU ,让其停止当前进程 CPU 收到中断信号后,正在执行的进程会停止,好心的操作系统会想办法先保存当前的状态 操作系统接管中断后,执行一段汇编程序帮助寄存器之前进程的状态 当操作系统保存好状态后就会执行调度程序,让其决定下一个将要执行的进程 最后操作系统会执行下一个进程

协程
什么是协程 协程和进程,线程的区别是什么 协程有什么优缺点



比较简答的思路是当调用阻塞 IO 的时候,重新启动一个线程去执行这个操作,等执行完成后,协程再去读取结果,这是不是和多线程很像 将系统 IO 进行封装,改为异步调用的方式,此时需要大量的工作,所以需要寄生于编程语言的原生支持
总结

更多精彩推荐 ☞QQ 被曝搜集浏览器历史记录;饿了么回应骑手自焚;原锤子团队被合并暂停手机研发;| 极客头条
☞中美科技战:打了华为,为何小米再遭殃?
点分享 点收藏 点点赞 点在看
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
关注数据与安全,洞悉企业级服务市场:http://www.ijiandao.com/
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/