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

进程 线程 协程基本概念和区别 还有内在联系

理解进程、线程和协程是掌握现代编程和系统并发能力的基础。下面这个表格能帮你快速把握它们的核心区别。

特性维度

进程 (Process)

线程 (Thread)

协程 (Coroutine)

​基本定义​

资源分配和拥有的独立单位,程序的一次执行实例

CPU调度的基本单位,进程内的一个执行实体

用户态的轻量级线程,可暂停/恢复的函数

​资源拥有​

拥有独立的地址空间和系统资源

共享进程资源,拥有少量私有资源(如栈、寄存器)

共享线程资源,拥有自己的寄存器上下文和栈

​切换开销​

大(涉及完整上下文切换,如内存、文件句柄等)

中等(主要切换栈、寄存器等,但需内核介入)

极小(仅在用户态切换寄存器上下文,无内核参与)

​调度方式​

操作系统内核调度

操作系统内核调度

由用户程序控制调度(协作式)

​通信方式​

复杂,需进程间通信(IPC),如管道、消息队列、共享内存

简单,可通过共享进程的全局变量、内存等(但需同步机制)

简单,通常通过共享全局变量(通常无需加锁)

​并发性与稳定性​

进程间相互隔离,一个进程崩溃通常不影响他人,稳定性高

线程共享内存,一个线程崩溃可能导致整个进程终止,稳定性较低

一个协程阻塞会导致整个线程阻塞,无法直接利用多核CPU

🔄 深入理解内在联系

可以把进程、线程和协程看作一个层层包含的生态系统,它们协同工作以实现高效的并发执行。

  • ​进程是资源的容器​​:它是程序的执行实例,为程序运行提供了独立的“沙箱”环境。操作系统通过​​进程控制块(PCB)​​ 来管理进程的各种信息。

  • ​线程是执行的流程​​:一个进程至少有一个主线程,也可以创建多个线程。线程是CPU调度的基本单位,共享进程的资源。操作系统通过​​线程控制块(TCB)​​ 管理线程。

  • ​协程是协作的任务​​:协程运行在线程之内,​​由程序员在代码中控制切换(非抢占式)​​。这种协作式调度避免了多线程中复杂的锁竞争问题,极大地提升了I/O密集型任务的并发效率。一个线程可以承载成千上万个协程。

💡 如何选择与应用场景

了解概念后,关键在于根据任务类型做出正确的技术选型。

  • ​多进程 (Multiprocessing)​​:

    • ​适用场景​​:​​CPU密集型任务​​(如图像处理、科学计算),需要利用多核CPU优势;需要​​高稳定性和隔离性​​的任务。

    • ​特点​​:能真正实现并行,但进程间通信成本较高,创建和切换开销大。

  • ​多线程 (Multithreading)​​:

    • ​适用场景​​:​​I/O密集型任务​​(如网络请求、文件读写)、有图形界面的应用程序(防止UI卡顿)。

    • ​特点​​:在I/O等待时能释放资源,响应性好。但需要注意线程同步问题(如死锁)。在Python中,由于全局解释器锁(GIL)的存在,多线程不适用于CPU密集型任务。

  • ​协程 (Coroutine)​​:

    • ​适用场景​​:需要​​极高并发连接数​​的I/O密集型场景(如高性能网络服务器、爬虫)。

    • ​特点​​:​​单线程内高并发,资源消耗极低​​。但由于是单线程,无法直接利用多核CPU。在实践中,常采用 ​​“多进程 + 协程”​​ 的架构,即用多进程来利用多核,每个进程内使用协程处理高并发,从而兼顾性能和效率。

⚠️ 补充一个特殊情况:Python的GIL

在Python中,有一个全局解释器锁(GIL),这导致同一时刻只有一个线程在执行Python字节码。因此,对于CPU密集型任务,多线程无法利用多核优势,此时应优先选择多进程。但对于I/O密集型任务,由于线程在I/O时会释放GIL,多线程仍然可以有效提升效率。

http://www.dtcms.com/a/545116.html

相关文章:

  • Linux(1)rsyslog(1)基础使用
  • Arbess零基础学习,安装与配置
  • 温州网站建设seo跨境电商平台shopee
  • Rust——Tokio的多线程调度器架构:深入异步运行时的核心机制
  • webpack - 常用的 CSS 加载器(webpack与其常见loader加载器使用方式)
  • PyTorch2 Python深度学习 - 张量(Tensor)的定义与操作
  • 微信小程序开发案例 | 通讯录小程序(上)
  • 做网站要学什么专业大连谷歌seo
  • 深圳做网站公司营口化工网站建设
  • CUDA-GDB(13)——支持的平台及常见问题解决
  • Warp是什么
  • Go语言设计模式:建造者模式详解
  • 外观模式:复杂系统的统一入口
  • 个人做网站模版是否有人买如何引用网站图片
  • 库卡机器人通讯-EtherKRL-XML格式
  • 自动驾驶技术全景解析:从感知、决策到控制的演进与挑战
  • 建站平台在线提交表格apache 配置网站
  • 前端HTTP,JavaScript,网络
  • 汽车充电站光储充项目方案
  • 为什么Service层和Mapper层需要实现interface接口
  • 杭州做网站公司排名建筑工人招工网
  • 服务RejectedExecutionException问题对Semaphore的思考
  • GitLab 钩子 + Jenkins 自动化构建项目
  • 安装Pytorch GPU+CPU版本【通过本地安装解决无法使用pip指令下载问题】
  • DevExpress WinForms中文教程:Data Grid - 如何自定义汇总函数?
  • 西安建设市场诚信信息平台网站wordpress文章缩略图
  • 解锁未来:云原生如何重塑企业数字竞争力
  • 铜陵市建设工程管理局网站专业的网站开发团队
  • AI赋能座舱产品需求开发
  • SENT协议详解