学新通技术网

详解开发语言程序中的进程与线程的概念

juejin 35 1
详解开发语言程序中的进程与线程的概念

进程

概念

  • 进程和程序的区别

    • 程序是静态的指令集合
    • 进程是动态的程序的一次执行过程
  • 进程是进程实体的运行过程,是系统资源分配和调度的基本单位

  • 注意:进程之间可以是独立的,也可以是交互性的

进程实体的组成

  • PCB(面向操作系统)

    • 进程标识符PID
    • 用户标识符UID
    • 进程优先级
    • 堆栈指针
    • 是进程的唯一标识,进程创建时创建,进程结束时结束
  • 程序段(面向进程自己)

  • 数据段(面向进程自己)

进程的状态

  • 状态

    • 就绪态 :无CPU,有其他所有资源
    • 运行态:有CPU,有其他所有资源
    • 阻塞态:无CPU,资源不全
    • 创建态
    • 终止态
  • 状态的转换

    • image-20221031233018186

进程通信

  • 顾名思义就是进程之间的信息交换

  • 共享存储

    • 特点:两个进程对共享空间互斥访问,使用同步互斥工具
  • 管道通信

    • 管道:连接读写进程的共享文件
  • 消息传递

    • 消息进程提供发送/接收消息两个原语进行数据交换

线程

线程是一个基本的CPU执行单位,也是程序执行流的最小单位

引入线程目的

  • 减少进程并发带来的时空开销(线程之间切换的开销很小)
  • 引入之后不仅进程之间可以并发,进程内各线程也可以并发

特性和优点

  • 并发系统开销降低,并发性提升

    • 注意:不同进程之间的线程切换是会导致进程切换的
  • 引入线程之后,线程是CPU调度的基本单位,进程仍然是资源分配的基本单位

  • 多CPU的系统上,各个线程也可以分派到不同的CPU上并行执行

  • 线程几乎不拥有资源(极少)

    • 系统资源在进程那里
  • 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预

实现方式

  • 用户级线程

    • 所有的线程管理工作都是用户基于线程库在管理,操作系统看不见多线程
    • image-20221031233323331
  • 内核级线程

    • 所有的线程管理工作都是操作系统负责,操作系统能看到多线程
    • image-20221031233336608
  • 多线程模型

    • 一对一

      • 一个用户级线程连接一个内核级线程
      • 操作系统只能看得内核级线程,所以只有内核级线程才是处理机分配的基本单位
    • 多对一

      • 多个用户级线程连接一个内核级线程

        • 优点:开销小
        • 缺点:并发度低:一个线程阻塞,所有进程阻塞
      • image-20221031233406481

    • 多对多

      • image-20221031233416123

        • 读个用户连接到多个内核

本文出至:学新通技术网

标签: