rokevin
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
  • 静态强类型

    • Java
    • Kotlin
    • Dart
    • Swift
  • 静态弱类型

    • C语言
    • C++
  • 动态强类型

    • Python
  • 动态弱类型

    • JavaScript
    • PHP
  • 进程,线程,协程,管程,纤程的理解
    • 进程
      • 进程的定义
      • 进程的特征
      • 进程的状态
    • 线程
      • 概念
      • 特点
    • 协程
    • 管程
      • 概念
      • 组成
      • 临界资源的概念
    • 纤程

进程,线程,协程,管程,纤程

进程,线程,协程,管程,纤程的理解

  • 进程
  • 线程
  • 协程
  • 管程
  • 纤程

进程

进程的定义

狭义定义:进程就是程序的执行过程。

进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

操作系统引入进程的概念的原因

  1. 从理论角度看,是对正在运行的程序过程的抽象
  2. 从实现角度看,是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序

进程的特征

  • 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。

  • 并发性:任何进程都可以同其他进程一起并发执行

  • 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;

  • 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

  • 结构特征:进程由程序、数据和进程控制块三部分组成。

    多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

进程的状态

就绪状态(Ready;运行状态(Running);阻塞状态(Blocked)

为了使多个程序能够并发(同一时刻只有一个在运行,但感觉起来像多个同时运行;并行(同一时刻真的多个在运行,不是感觉像多个))的执行,操作系统需要一个结构来抽象和表示这个程序的运行。

进程是操作系统对一个正在运行的程序的一种抽象结构。

进程是指在操作系统中能独立运行并作为资源分配的基本单位,由一组机器指令、数据和堆栈等组成的能独立运行的活动实体。

操作系统可以同时运行多个进程,多个进程直接可以并发执行和交换信息。

进程在运行是需要一定的资源,如CPU、存储空间和I/O设备等。

线程

概念

线程(英语:thread)是操作系统能够进行运算调度的最小单位。

它被包含在进程之中,是进程中的实际运作单位。

一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

特点

在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。

线程具有以下属性:

  • 轻型实体
  • 独立调度和分派的基本单位
  • 可并发执行
  • 共享进程资源

进程是资源分配的基本单位,进程的调度涉及到的内容比较多(存储空间,CPU,I/O资源等,进程现场保护),调度开销较大,在并发的切换过程效率较低。

为了更高效的进行调度,提出了比进程更轻量的独立运行和调度的基本单位。

  • 线程比进程更轻量,线程能独立运行,独立调度,拥有资源(一般是CPU资源,程序计数器等)
  • 线程调度能大幅度减小调度的成本(相对于进程来说),线程的切换不会引起进程的切换
  • 线程的引入进一步提高了操作系统的并发性,线程能并发执行
  • 同一个进程的多个线程共享进程的资源(省去了资源调度现场保护的很多工作)

协程

  • 协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。
  • 协程是用户模式下的轻量级线程,操作系统内核对协程一无所知
  • 协程的调度完全有应用程序来控制,操作系统不管这部分的调度
  • 一个线程可以包含一个或多个协程
  • 协程拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下纹和栈保存起来,在切换回来时恢复先前保运的寄存上下文和栈
  • 协程能保留上一次调用时的状态
  • Windows下的实现叫纤程

管程

概念

管程 (英语:Monitors,也称为监视器) 是一种程序结构,结构内的多个子程序(对象或模块)形成的多个工作线程互斥访问共享资源。这些共享资源一般是硬件设备或一群变量。

组成

局部于管程内部的共享数据结构说明;

对该数据结构进行操作的一组过程;

对局部于管程内部的共享数据设置初始值的语句。

管程实现了在一个时间点,最多只有一个线程在执行管程的某个子程序。

与那些通过修改数据结构实现互斥访问的并发程序设计相比,管程实现很大程度上简化了程序设计系统中的各种硬件资源和软件资源,均可用数据结构抽象地描述其资源特性,即用少量信息和对资源所执行的操作来表征该资源,而忽略了它们的内部结构和实现细节。

利用共享数据结构抽象地表示系统中的共享资源,而把对该共享数据结构实施的操作定义为一组过程。

临界资源的概念

一次只允许一个进程访问的资源;多个进程只能互斥访问的资源

管程就是代表共享资源的数据结构以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序共同构成的一个操作系统的资源管理模块。

管程被请求和释放临界资源的进程所调用。

管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。

纤程

为了帮助各公司更快、更正确地将他们的代码移植到Windows,Microsoft ,在操作系统中增加了纤程(Fiber)。

线程与纤程对比,有如下的特性:

线程是在Windows内核中实现的,操作系统会根据系统的调度算法对线程进行调度。

纤程是在用户模式下实现的,内核对纤程一无所知。

纤程是更轻量级的线程,一个线程可以包含一个或多个纤程

内核会对线程进行抢占式调度,线程一次只能执行一个纤程的代码(具体执行哪一个纤程由用户调度算法决定)

纤程的调度与线程的调度没有直接关系,操作系统随时可能会夺取纤程所在线程的运行权

除非正在运行的纤程显式的切换到另一个纤程,否则其他纤程将无法运行

Windows有一套API来讲线程转换为纤程或者在同一个线程里面创建多个纤程

最近更新:: 2026/1/21 01:32
Contributors: luokaiwen