【原】线程、进程和协程
in 备忘 with 0 comment

【原】线程、进程和协程

in 备忘 with 0 comment

只要持续地努力,不懈地奋斗,就没有征服不了的东西。 --塞内加

这是一个老问题,但是你真的对他们很了解么?

进程【相互间隔离】

进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。

在计算机中,每一个进程都会有一个唯一的进程ID。一个CPU同一时刻,只能运行一个进程。所以在过去单核计算机时代,所谓的多任务系统,都不是真正的多任务同时进行,因为CPU运算速度特别快,所以先运行A进程,运行一会儿,快速切换到B进程,然后运行一会儿,在切回来,由于CPU运算的太快了,让我们感觉进程A和进程B是在同时运行的。那么问题来了,进程在切换的时候要先把前一个进程运行的数据保存起来,以便切换回来的时候能够准确的继续运算,同样,后一个进程需要把上次运行保存的数据拿出来,以便正确的继续向后执行,那么这个之间是有时间消耗的,所以一旦你启动的进程足够多的时候,就会出现卡死。

线程【加锁,不然会混乱】

线程(英文:thread),操作系统技术中的术语,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是行程中的实际运作单位。

线程必定包含在线程中,而且一个进程必然有至少一个线程。这里打个比方说明下线程和进程的关系,假设有个网站项目组,当中有设计师,前端程序员,后端程序员,产品经理这四个角色,我们的目标是做一个网站,有个大牛四个角色一个人包了,还有就是聘请四个人,一个负责一个部分。这个关系和进程、线程的关系很像。我们启动一个进程去做一个网站,然后进程下必然有一个线程(大牛),或者它也可以启动四个线程(聘请四个人),最终做出网站。

协程【速度快,灵活】

协程是一种程序组件,是由子例程(过程、函数、例程、方法、子程序)的概念泛化而来的,子例程只有一个入口点且只返回一次,而协程允许多个入口点,可以在指定位置挂起和恢复执行。

还是上面的例子,这次不是找四个人分别负责四个部分,而是找四个大牛,哪个部分进度慢了,有进度快的停下来去帮忙,在极短的时间内,保持进度的一致,这样不断交叉去执行,看上去有点乱,但是效率却是非常高,这个在异步IO技术上体现的最为明显。

最后说两句,个人的理解,感觉有不对的地方,希望大家看了后指出来!!

Comments are closed.