当前位置: 首页 > news >正文

进程与线程与协程

我想这应该是每一个人刚开始都会头疼的问题,很多时候分清它们真的很烦。

进程

是操作系统资源分配的基本单位

它拥有自己的独立内存空间和系统资源,每个进程都有独立的堆和栈,不与其他进程共享。进程间通信需要通过特定的机制,如:管道、消息队列、信号量等、由于进程拥有独立的内存空间,因此稳定性和安全性相对较高,但同时上下文切换的开销也比较大,因为需要保存和恢复整个进程的状态

线程

是任务调度和执行的基本单位

与进程不同,线程共享进程的内存空间,包括堆和全局变量。线程之间通信更加高效,因为它们可以直接读写共享内存。线程的上下文切换开销较小,因为只需要保存和恢复线程的上下文(线程执行时所需的所有状态信息),而不是整个进程的状态。然而,由于多个线程共享内存空间,会出现数据竞争和线程安全的问题,需要通过同步和互斥机制来解决。

线程崩溃可能会导致整个进程崩溃,而进程中的子进程崩溃,并不会影响其它进程

协程

是一种用户态的轻量级线程

其调度完全由用户程序控制,而不需要内核参与,它拥有自己的寄存器上下文和栈,但与其它协程共享堆内存。开销非常小,只要保存和恢复协程的上下文,而无需进行内核级的上下文切换。

内存分配

系统在运行时会为每个进程分配不同的内存空间,而对线程而言,除了CPU外,系统不会为线程分配内存(资源来自所属进程的资源,线程有自己的栈内存,但线程的栈内存其实也是从进程里面获取的),线程之间只能共享资源。同时这也是为什么线程崩溃可能会导致进程崩溃的原因。协程就是用线程的栈内存和进程的堆内存。

没有线程的进程可以看做是单线程,如果一个进程内有多个线程,则执行过程不是一条线,而是多条线

http://www.jsqmd.com/news/447307/

相关文章:

  • 通义灵码插件深度体验:如何用AI助手让你的IDEA开发效率翻倍?
  • 为什么我放弃了Redis Desktop Manager?Datagrip插件开发者的深度工具对比
  • C#老版本(.NET 4.6.1)如何优雅处理路径转换?绝对/相对路径互转保姆级教程
  • 89C51定时器避坑指南:为什么你的12M晶振定时不准?TH/TL配置常见错误解析
  • Ubuntu 22.04下用Tgt搭建iSCSI共享存储的完整流程(含多客户端配置)
  • 向量量化(VQ)在语音处理中的应用:如何用Codebook提升语音识别准确率
  • PyQt5实战:用QComboBox打造动态下拉菜单(附QTdesigner.ui文件)
  • 用Python实战演示:二项分布如何随着样本量增大逼近正态分布(附完整代码)
  • EasyExcel实战:如何用滑动窗口思想优化10万+数据合并单元格性能?
  • 用C++实现激光炮遮挡算法:从数学建模到代码优化的完整过程
  • 用Echarts手把手教你绘制炫酷旭日图(附完整代码与避坑指南)
  • 滑模控制中的Hurwitz条件:为什么你的控制器总是不稳定?常见设计误区解析
  • Vue 3.0静态文件下载避坑指南:为什么你的Excel模板总是404?
  • 避坑指南:uniapp安卓隐私弹窗配置中的常见错误与解决方案
  • 从医疗到车联网:RM500Q模组的5种行业应用AT指令扩展方案
  • Spring全家桶版本选择指南:2023年最新Spring Boot/Cloud兼容性对照表(附Excel下载)
  • ACM论文标题太长导致重叠?5分钟教你修改acmart.cls文件搞定
  • 用Docker-Compose一键部署Hadoop集群(含数据持久化配置)
  • npm淘宝镜像失效?手把手教你更新registry.npmmirror.com的正确姿势
  • 手把手教你用Python实现无参考图像质量评估(附PIQE/BRISQUE/NIQE代码示例)
  • 从InRoads到OpenRoads:Bentley道路设计软件升级避坑指南(附新旧功能对比)
  • CATIA材料库批量导入全攻略:用Excel+MATLAB一键搞定(附避坑指南)
  • 用示波器抓包分析SPI和IIC时序:基于STM32CubeMX的通信调试技巧
  • EasyCode避坑指南:解决代码生成后Mapper.xml报错、依赖冲突等6个常见问题
  • SLF4J警告终结者:一招搞定‘multiple SLF4J providers‘的烦恼
  • Spring Boot 3.5.5 + Spring AI 1.0.1整合sglang模型避坑指南:解决HTTP 400的两种自定义配置
  • 避坑指南:XeLaTeX/BibTex混用导致文献引用失效?手把手教你多引擎协同工作流
  • Linux系统架构识别实战:从命令行到内核文件的5种方法(附常见误区解析)
  • MacBook Pro必备的10款小众神器:从音视频剪辑到代码开发全搞定
  • llama.cpp部署Hugginghub模型