个人总结:线程,进程,异步,协程等概念及相互联系

操作系统,进程,线程之间的关系

现代操作系统都是支持“多任务”的操作系统:即操作系统可以同时运行多个任务。

要理解这些概念,需要先了解一下操作系统的一些相关概念。大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发(别觉得并发有多高深,它的实现很复杂,但它的概念很简单,就是一句话:多个任务同时执行)。

异步和多线程

多线程和异步的关系:从辩证的角度上看,异步是目的,多线程是其中的一个手段,多线程可以实现异步,异步是当一个调用者的请求发送给被调动者后不需要等待被调用者返回的结果,这个调用者可以是一个线程处理操作也可以是进程处理操作。

使用场景:当需要执行I/O操作时,使用异步操作比使用线程+同步 I/O操作更合适。线程的适用范围则是那种需要长时间CPU运算的场合

协程

协程只是程序调度的方式,多线程和多进程由操作系统调度,而协程由程序自身即程序员调度,仅此而已。异步io指的是程序只发io指令并不阻塞等待io结果,在io结束前需要io结果的代码当然不能执行,所以我们通过协程调度,然后让cup去执行别的代码,等io结束再切换回来,其实就只是增加cup的利用。io不是cpu在干活,而是磁盘网络之类,正是因为cpu的速度远高于磁盘及网络,所以我们通过异步的方式来io,就是io的时候不让cpu傻站着等,io结束后,需要io结果的代码需要接着执行,所以需要使用协程切换回来,协程只是可以让程序在某个地方停下来,然后在需要的时候(io完成后)再接着执行。

写在最后

这部分都是偏向应用层的,说的比较浅,而且很多地方也是个人看法,有不同的地方欢迎指正。


分享到:


相關文章: