news 2026/10/22 6:52:53

【OS】进程、线程、协程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【OS】进程、线程、协程

长期补充,建议关注收藏!


目录

  • 总结
  • 进程与线程
    • Windows系统
    • Mac系统
  • 协程

总结

特性进程线程协程
内存空间独立的内存空间共享进程内存空间共享同一个线程内存空间
资源拥有独立的资源共享进程资源共享线程资源
开销创建、销毁和上下文切换开销较大较小,创建和销毁成本低极低,上下文切换非常快速
调度操作系统调度操作系统调度用户调度(协作式)
并行性可以在多核 CPU 上并行执行可以在多核 CPU 上并行执行主要是并发执行,适用于 I/O 密集型
适用场景适用于计算密集型任务、大型应用程序适用于需要并行执行的任务适用于大量 I/O 操作、轻量级任务

进程与线程

  • 定义
特性进程线程
定义程序执行的基本单位
是加载运行程序、保存上下文的cpu时间片
执行中的最小单位
是运行一段指令的cpu时间片
资源拥有独立的内存空间和资源(存代码、运行中数据、执行任务主线程)共享进程的资源
开销创建和销毁的开销较大创建和销毁的开销较小
执行单位进程中可以有多个线程线程是执行单元,必须依赖于进程
并发性进程之间并行执行线程之间并行执行
通信方式需要借助进程间通信机制直接共享一个进程内资源
可靠性相互隔离,进程崩溃不会影响其他进程线程崩溃影响整个进程
  • 进程与线程的关系
    进程包含线程,线程是更小的单位,一个进程至少有一个线程(主线程)。
    进程中的线程共享进程的资源。
    进程中的线程任一出错,进程崩溃。
    进程关闭时,回收所有内存(包括出现内存泄漏的线程)
  • 线程与进程的区别:
    • 应用:进程可看作独立应用,线程不行
    • 资源:进程是资源分配的基本单位,而线程是cpu调度的基本单位。
    • 通信:进程之间是相互独立的,进程间的通信需要通过操作系统提供的机制;线程之间可以直接共享数据,不需要复杂的通信机制。
    • 调度:进程切换开销>线程;线程切换不会引起进程切换,除非线程不在一个进程内切换(引起进程切换)。
    • 系统开销:创建和撤销的开销都是进程>线程,因为进程涉及当前执行cpu环境、状态保存和设置,线程仅需要保存和设置少量寄存器内容。
  • 进程和线程的调度
    进程调度:操作系统通过调度算法决定哪个进程可以使用 CPU。进程的调度通常基于时间片或优先级来分配 CPU 时间。
    线程调度:操作系统也会调度线程,多个线程可能在一个进程中竞争 CPU 时间。线程调度通常比进程调度更加灵活
  • 如何查看进程和线程
    • Linux
ps-eLf|grep<进程ID>' 使用 ps 命令查看进程及其线程信息,特别是 -L 选项可以显示进程的线程信息。 -eLf:列出所有进程及其线程 'top' top 命令也能显示线程信息,但默认只显示进程。如果你想查看线程,可以按 H 键切换到线程模式。 htop 是 top 的增强版,支持更直观的线程信息查看。运行 htop,然后按 F2 打开设置,找到显示线程的选项,将其启用即可查看线程信息。 '

Windows系统

  1. 按 Ctrl + Shift + Esc 打开任务管理器。
    切换到 “详细信息” 选项卡。
    右键点击标题栏,选择 “选择列”。
    在弹出的对话框中,勾选 “线程数”,点击 确定。
    然后你可以看到每个进程的线程数,显示在 “线程数” 列中。
  2. 命令行操作
tasklist /fi"pid eq <进程ID>"' 显示指定进程的基本信息,包括线程数(在 Threads 列中)。 '

Mac系统

  1. 活动监视器
  2. 命令行操作
top-ocpu' 在 top 界面中,按下 H 键可以切换到显示线程信息模式。在这个模式下,top 会显示进程及其线程。 'ps-eLfps-eLf|grep<进程ID>#htop要通过homebrew来安装

协程

协程(Coroutine):轻量线程,通常用于并发编程中。与传统的多线程相比,协程的切换开销更小,能在单线程内实现异步操作。协程通过让出控制权来进行任务切换,而不像线程那样依赖操作系统调度,通常由程序员控制协程的执行时机。

在 Python 中,协程通常使用 async 和 await 关键字实现。async 用来定义协程函数,await 用来挂起协程,等待异步操作完成后继续执行。

''' say_hello 是一个协程函数, await asyncio.sleep(1) 是一个异步操作,模拟程序中的 I/O 操作。 当 await 等待时,Python 解释器可以执行其他任务,减少等待时间。 '''importasyncioasyncdefsay_hello():print("Hello")awaitasyncio.sleep(1)# 模拟异步操作print("World")# 运行协程asyncio.run(say_hello())
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 6:49:16

迅为iTOP4412精英版之Android镜像的烧写

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/22 6:47:01

PJ85718DM+ATmega3250双模温控架构:抗干扰采样与确定性通信实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/22 6:47:01

STM32+模拟温度传感器PJ85718DM实现本地与远程测温上报

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/22 6:46:46

PJ85718DM与TM4C1299KCZAD在HVAC温控系统中的工业级协同设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/22 6:45:38

STM32F429ZI与PJ85718DM的HVAC温度监测节点设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/22 6:44:37

HVAC多点测温实践:PJ85718DM与PIC18F66K40的I2C方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华