问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

程序、进程、线程、协程结构图

创作时间:
作者:
@小白创作中心

程序、进程、线程、协程结构图

引用
CSDN
1.
https://blog.csdn.net/Lzy1154119938/article/details/139303361

程序、进程、线程和协程

程序(Program)

  • 指的是编写好的源代码文件或者可执行文件
  • 是静态的,存储在磁盘上

进程(Process)

  • 是程序执行的一个实例
  • 拥有自己的地址空间、资源、状态等
  • 是系统分配资源的基本单位
  • 可以独立运行、调度和管理
  • 进程之间相互独立,需要通过进程间通信(IPC)进行交互
进程的特点
  • 独立性:每个进程都有自己的地址空间和资源
  • 隔离性:进程之间相互隔离,不会相互影响
  • 并发性:多个进程可以同时执行
  • 可抢占性:操作系统可以暂停当前进程并切换到其他进程

线程(Thread)

  • 是进程内的一个执行单元
  • 共享进程的地址空间和资源
  • 是系统调度的基本单位
  • 线程之间共享相同的上下文和全局变量
  • 可以提高程序的并发性和响应性
线程的特点
  • 共享性:线程共享进程的资源和地址空间
  • 并发性:多个线程可以同时执行
  • 高效性:创建和销毁线程比进程开销小
  • 有限性:受限于进程的地址空间和资源

协程(Coroutine)

  • 是一种轻量级的线程
  • 在用户空间中实现,不依赖于操作系统的线程调度
  • 可以暂停和恢复执行
  • 协程之间可以相互切换,但不是被操作系统调度,而是由程序自身控制
协程的特点
  • 用户空间实现:不依赖于操作系统的线程调度
  • 轻量级:协程的创建和切换开销小
  • 灵活性:可以在程序中自由切换和调度
  • 适用性:适用于IO密集型任务和高并发场景

程序、进程、线程和协程作为最小单元关系的结构图

在这个结构图中:

  • 程序是编写好的源代码文件或者可执行文件,是静态的。
  • 进程是程序执行的一个实例,拥有自己的地址空间、资源等。
  • 进程内包含多个线程,线程共享进程的地址空间和资源。
  • 线程是进程内的一个执行单元,是系统调度的基本单位。
  • 线程内包含多个协程,协程是一种轻量级的线程,可以在用户空间中实现,不依赖于操作系统的线程调度。

总结

  • 线程是进程的最小执行单元,一个进程可以包含多个线程,它们共享进程的地址空间和资源,是操作系统调度的基本单位。
  • 协程是轻量级的线程,是线程的最小执行单元,它在用户空间中实现,不依赖于操作系统的线程调度。协程之间可以自由切换,但不会被操作系统调度,而是由程序自身控制。

这种区分可以帮助我们理解它们在并发编程中的不同作用和特点。

进程、线程和协程之间的通信方式

进程之间通信(Inter-Process Communication, IPC)

  1. 管道(Pipe):管道是一种半双工的通信方式,数据只能单向流动。通常用于具有亲缘关系的进程之间的通信。
  2. 命名管道(Named Pipe):命名管道是一种有名字的FIFO文件,允许无关的进程之间进行通信。
  3. 消息队列(Message Queue):消息队列是一个消息链表,允许一个或多个进程通过消息进行通信,消息可以是结构体等复杂数据类型。
  4. 信号量(Semaphore):信号量是一种计数器,用于控制对共享资源的访问,允许多个进程之间进行同步和互斥操作。
  5. 共享内存(Shared Memory):共享内存是一块被多个进程共享的内存区域,允许多个进程之间直接读写共享的数据,需要配合信号量等进行同步。
  6. 套接字(Socket):套接字是一种基于网络的通信方式,允许不同主机上的进程进行通信。

线程之间通信(Inter-Thread Communication)

  1. 锁机制(Lock):线程通过互斥锁(Mutex)或读写锁(ReadWrite Lock)来保护共享资源的访问,只有拥有锁的线程才能访问共享资源。
  2. 条件变量(Condition Variable):线程通过条件变量来实现线程之间的等待和唤醒,允许线程在特定条件下等待或被唤醒。
  3. 信号量(Semaphore):信号量也可以用于线程之间的同步和互斥操作,允许多个线程之间进行同步。
  4. 屏障(Barrier):屏障允许一组线程在某个点上进行同步,当所有线程都达到该点后才能继续执行。
  5. 消息队列(Message Queue):一些线程库提供了消息队列的实现,允许线程之间通过消息进行通信。

协程之间通信

协程之间通信相对较为简单,通常通过共享全局变量来实现。由于协程在用户空间中运行,不涉及系统调度,因此不需要像进程或线程那样复杂的同步机制。协程通常在同一个线程内运行,它们共享该线程的内存空间,因此可以直接访问和修改全局变量。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号