进程、线程、协程

概念可以帮助我们更好的思考和理解。

进程(process)

进程是正在运行的程序的实例,广义上是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。
进程是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
在面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体

  • 特征:

    • 动态性: 动态产生、动态消亡
    • 并发性: 并发执行
    • 独立性: 独立运行的基本单位,系统分配资源和调度的独立单位
    • 异步性: 按各自独立不可预知的速度向前推进
  • 结构特征:

    进程由程序、数据和进程控制块三部分组成。

  • 三种状态

    • 就绪状态(Ready):
      进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。

    • 运行状态(Running):
      进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。

    • 阻塞状态(Blocked):
      由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理器资源分配给该进程,也无法运行。

线程(thread)

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序中一个单一的顺序控制流程,是程序执行流的最小单元
也是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位。
一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。

  • 特征
    • 线程是进程中的实体,是被系统独立调度和分派的基本单位;
    • 一个进程可以拥有多个线程,一个线程必须有一个父进程;
    • 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源;
    • 一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行;
    • 线程也有就绪、阻塞和运行三种基本状态;
    • 每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

协程(coroutine)

协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。
协程也是一种程序组件。相对子例程而言,协程更为一般和灵活。

  • 特征
    • 一个程序可以包含多个协程,可以对比与一个进程包含多个线程;
    • 有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制;
    • 协程的起始处是第一个入口点,在协程里,返回点之后是接下来的入口点;
    • 协程的生命期完全由他们的使用的需要决定;
    • 协程可以通过yield来调用其它协程。通过yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称、平等的;
    • 协程更适合于用来实现彼此熟悉的程序组件,如合作式多任务,迭代器,无限列表和管道。

参考文档

冷月无声 wechat
关注也是一种力量
-------------End of article. I appreciate whoever read and leave commends on articles.-------------

本文标题:进程、线程、协程

文章作者:冷月无声

发布时间:2018年03月31日 - 22:03

最后更新:2018年05月29日 - 09:05

原始链接:https://www.lengyuewusheng.com/2018/03/31/00045_进程、线程、协程/

许可协议:本博客所有文章除特别声明外,均采用 BY-NC-SA 3.0许可协议。转载请注明出处!

感谢鼓励!