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

深入浅出:进程和线程的区别与联系

大家是否好奇过,为什么电脑可以同时运行浏览器、音乐播放器和Word文档而互不干扰?又为什么在浏览器里,可以一边下载文件一边滚动页面?这背后的功臣,就是操作系统中的两个核心概念:进程线程

1、什么是进程

进程是操作系统进行资源分配和调度的基本单位。

当你双击一个程序图标时,操作系统就为你创建了一个进程。它会为这个进程分配:

  • 独立的内存空间:存放代码、数据和堆栈。
  • 系统资源:如打开的文件、网络端口等。
  • 管理信息:进程ID(PID)、优先级、状态等。

关键特性:

  • 独立性:每个进程都运行在各自受保护的内存沙箱中。一个进程崩溃,一般不会波及其他进程。这提供了出色的稳定性和安全性。
  • 优缺点:稳定、安全,但开销大,切换慢。
  • 开销大:创建、销毁或切换进程,需要分配或回收大量资源,成本较高。
  • 生命周期创建、就绪、运行、阻塞、终止

简单来说,进程是程序的“一次执行过程”,它为我们提供了程序运行的独立舞台。

2、什么是线程

 

2.1、为什么要有线程

 

线程是进程中的一个执行流,是CPU调度和执行的基本单位。

一个进程可以包含多个线程,这些线程“寄生”在进程内部。

首先,"并发编程" 成为 "刚需"

  • 单核 CPU 的发展遇到了瓶颈,要想提高算力, 就需要多核 CPU,而并发编程能更充分利用多核 CPU资源
  • 有些任务场景需要 "等待 IO",为了让等待 IO 的时间能够去做⼀些其他的工作, 也需要用到并发编程

其次,虽然多进程也能实现并发编程,但是线程比进程更轻量

  • 创建线程比创建进程更快
  • 销毁线程比销毁进程更快
  • 调度线程比调度进程更快

最后,线程虽然比进程轻量,但是人们还不满足,于是又有了 "线程池" 和 "协程"【这部分后面还会单独介绍】

关键特性:

  • 共享资源:所有线程共享其所属进程的全部资源和内存空间。
  • 独立资源:有自己的栈和寄存器
  • 并发执行:在多核CPU上,多个线程可以真正并行运行;在单核CPU上,通过时间片轮转,它们可以并发执行,从而提高程序的响应能力和效率。
  • 轻量级:创建、销毁、切换线程的开销远小于进程,因为它们不需要新的内存空间。
  • 高效通信:线程间可以直接读写同一个全局变量,通信极其方便。
  • 风险共存:便利带来风险。多个线程同时修改同一数据可能导致数据混乱(竞态条件)。因此需要引入“锁”等同步机制来确保数据安全,这也增加了编程的复杂性。
  • 优缺点:切换快,通信方便,但一个线程崩溃可能影响整个进程。
  • 生命周期:与进程类似,但更简单。

3、进程与线程的区别与联系

  • 进程是包含线程的,每个进程至少有⼀个线程存在,即主线程
  • 进程和进程之间不共享内存空间,同⼀个进程的线程之间共享同⼀个内存空间
  • 进程是系统分配资源的最小单位,线程是系统调度的最小单位
  • 一个进程挂了⼀般不会影响到其他进程,但是⼀个线程挂了,可能把同进程内的其他线程⼀起带走(整个进程崩溃)

特性进程线程联系
定义操作系统资源分配和调度的基本单位进程内的一个执行路径,是CPU调度和执行的基本单位线程是进程的一部分
资源分配拥有独立的地址空间、代码段、数据段、堆栈、打开的文件句柄等资源共享所属进程的所有资源(地址空间、代码、数据、文件等)线程共享进程的资源
创建与销毁开销较大、需要分配和初始化大量资源较小,主要是创建堆栈和寄存器上下文线程的创建和切换比进程更高效
切换开销较大、需要切换地址空间、刷新TLB等较小,只需保存和恢复少量寄存器信息线程切换成本低,进程切换成本高
通信方式相对复杂,需要使用进程间通信机制,如管消息队列、共享内存、套接字等相对简单,可以直接访问进程的共享内存空间,也可以使用线程间同步机制(如互斥锁、条件变量、信号量等)线程间通信更高效
独立性高。进程间相互独立,一个进程崩溃通常不会影响其他进程底,线程共享进程资源,一个线程崩溃可能导致整个进程崩溃线程依赖于进程存在
并发程度可以实现进程级并发可以实现线程级并发,并发程度更高多线程并发是进程并发的补充和细化

4、总结

进程是资源的容器,强调隔离与安全;线程是执行的流程,强调协作与效率。

在选择使用进程还是线程时,可以遵循以下原则:

  • 需要高度稳定性和安全性,任务间隔离要求高,优先使用进程(如Chrome浏览器为每个标签页开一个进程)

  • 需要频繁创建和销毁,或需要极高效的数据共享和通信,优先使用线程(如Word文档中同时处理打字和拼写检查)

 

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

相关文章:

  • 做一个静态网站需要多少钱关键词
  • 西安网站建设方案外包浏览器网页版打开网页
  • 【Redis】 SpringBoot集成Redis
  • 网易企业邮箱邮箱登录入口江西网站建设优化服务
  • 汕头吧 百度贴吧超级优化小说
  • 视觉学习篇——机器学习模型评价指标
  • Java Agent 和字节码注入技术原理和实现
  • Java后端常用技术选型 |(五)可视化工具篇
  • 【数据库】Apache IoTDB数据库在大数据场景下的时序数据模型与建模方案
  • 网站建设系统课程广东建设网 四川是什么网站
  • 不止于 API 调用:解锁 Java 工具类设计的三重境界 —— 可复用性、线程安全与性能优化
  • 数据结构与算法:树(Tree)精讲
  • AI入门系列之GraphRAG使用指南:从环境搭建到实战应用
  • 【SolidWorks】默认模板设置
  • 基于秩极小化的压缩感知图像重建的MATLAB实现
  • 无人机图传模块技术要点与难点
  • Spring Cloud Alibaba 2025.0.0 整合 ELK 实现日志
  • AI+虚拟仿真:开启无人机农林应用人才培养新路径
  • ELK 9.2.0 安装部署手册
  • 代码统计网站wordpress设置在新页面打开空白
  • 网站开发的流程 知乎设计培训网站建设
  • Qt 的字节序转换
  • QT Quick QML项目音乐播放器17----自定义Notification通知、请求错误提示、Loading加载中提示
  • 【Qt】AddressSanitizer 简介
  • Linux(麒麟)服务器离线安装单机Milvus向量库
  • Qt Widgets和Qt Qucik在开发工控触摸程序的选择
  • 毕业设计网站做几个图片设计素材
  • 网站设计计划深圳分销网站设计公司
  • word套打工具根据高度动态分页
  • 华清远见25072班单片机基础学习day3