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

操作系统中,进程与线程的定义与区别

一、定义

1. 进程 (Process)

定义进程是程序的一次执行过程。它是操作系统进行资源分配和调度的基本独立单位。

通俗理解

  • 把一个程序(比如 Chrome 浏览器的一个可执行文件 chrome.exe)比作一张菜谱

  • 那么一个进程就是按照这个菜谱真正开始做饭的过程。这个过程需要占用厨房(CPU)、厨具(IO设备)、食材(数据)等资源。

  • 同时运行两个 Chrome 窗口?那就是两个独立的进程

关键点:每个进程都拥有自己独立的内存空间(代码段、数据段、堆栈等)和系统资源(如打开的文件)。

2. 线程 (Thread)

定义线程是进程中的一个执行流,是CPU调度和执行的基本单位。一个进程可以包含多个线程。

通俗理解

  • 继续用做饭的比喻。一个进程(做饭过程)中可以有多条线程

  • 比如,一条线程负责洗菜,另一条线程负责切菜,第三条线程负责炒菜

  • 它们共享同一个厨房(进程资源),但各自完成不同的任务(执行流)。

关键点:同一进程下的多个线程共享进程的内存空间和资源,但每个线程有自己独立的程序计数器


二、核心区别对比

特性进程 (Process)线程 (Thread)
基本性质资源分配的基本单位CPU调度和执行的基本单位
内存与资源拥有独立的地址空间和资源共享其所属进程的地址空间和资源
开销。创建、销毁、切换需要分配/回收独立内存,开销大。。创建、销毁、切换只需很少开销,因为资源共享。
独立性。一个进程崩溃后,在保护模式下不会影响其他进程。。一个线程崩溃会导致整个进程崩溃(因为它共享进程资源)。
通信机制复杂,需要进程间通信(IPC),如管道、消息队列、共享内存等。简单,可直接读写共享的进程数据来进行通信。
并发性进程之间可以并发执行。线程之间不仅可以并发执行,甚至可以实现并行(在多核CPU上)。
包含关系一个进程可以包含多个线程。线程是进程的一部分,必须依赖于进程而存在。

三、一个生动的比喻:公司与员工

为了更好地理解,我们可以用一个公司来比喻:

  • 进程 = 一个独立的公司

    • 这家公司有自己独立的办公场地、预算、打印机等资源(独立的内存空间和系统资源)。

    • 一家公司倒闭了,不会直接影响另一家公司(进程间相互独立,一个崩溃不影响另一个)。

    • 两家公司要合作,需要打电话、发传真、签合同(进程间通信IPC),过程比较复杂。

  • 线程 = 公司里的员工

    • 所有员工共享公司的办公场地、预算和打印机(共享进程资源)。

    • 员工之间协作非常方便,可以直接面对面交谈、传递文件(线程间通信简单,通过共享内存)。

    • 如果一个员工犯了严重错误(比如切断了整个公司的电源),可能导致整个公司无法运营(一个线程崩溃导致整个进程崩溃)。

    • 雇佣新员工(创建线程)或解雇员工(销毁线程)的成本很低,比开一家新公司(创建进程)要快得多。

  • CPU = 一个工作者(单核)

    • 这个工作者一段时间内只能做一件事。他可以在A公司(进程)工作一会儿,然后切换到B公司(进程)工作,这就是进程并发

    • 他在A公司工作时,可以一会儿做设计(线程1),一会儿写代码(线程2),一会儿开会(线程3),这就是线程并发

  • 多核CPU = 多个工作者

    • 此时,多个工作者可以同时在不同公司的不同岗位上工作,实现真正的并行


四、为什么要有线程?(线程的优势)

既然进程已经可以实现并发,为什么还需要线程?

  1. 更高效的并发:创建和切换线程的代价远小于进程。这使得频繁的并发任务(如Web服务器处理大量请求)效率更高。

  2. 资源共享与通信简便:线程间共享内存使得数据交换非常高效,无需借助复杂的IPC机制。

  3. 改善响应性:对于一个应用程序(一个进程),可以使用多线程。例如:

    • GUI程序:一个线程处理用户界面交互(保持响应),另一个线程在后台执行耗时的计算任务,防止界面“卡死”。

    • Web服务器:一个主线程监听请求,每当有新请求到来,就创建一个新线程去处理它,从而实现高并发。

总结

概念核心思想关键比喻
进程“资源分配的边界”一个独立的公司,拥有自己的所有资源。
线程“执行流的单位”公司里的员工,共享公司资源,负责具体执行任务。

简单来说:

  • 进程 使操作系统的并发成为可能。

  • 线程 使同一个进程内部的并发成为可能,并且大大提升了并发效率。

http://www.xdnf.cn/news/1366759.html

相关文章:

  • 似然函数对数似然函数负对数似然函数
  • Ant Design for UI 选择下拉框
  • BIO、NIO 和 AIO
  • 2025.8.25回溯算法-集合
  • Typora + PicList + Gitee 图床完整配置教程
  • 【ElasticSearch】json查询语法和可用的客户端
  • ESP32开发WSL_VSCODE环境搭建
  • Mysql系列--8、索引
  • Java延迟任务实现方案详解:从DelayQueue到实际应用
  • 2.3零基础玩转uni-app轮播图:从入门到精通 (咸虾米总结)
  • 【Docker基础】Docker-compose进阶配置:健康检查与服务就绪
  • K8s Pod驱逐机制详解与实战
  • C++ extern 关键字面试深度解析
  • 开源 C++ QT Widget 开发(六)通讯--TCP调试
  • 安全合规:AC(上网行为安全)--下
  • vue 一键打包上传
  • Genymotion 虚拟机如何安装 APK?(ARM 插件安装教程)
  • ICCV 2025|TRACE:无需标注,用3D高斯直接学习物理参数,从视频“预知”未来!
  • 二、添加3D形状
  • More Effective C++ 条款07:不要重载、和,操作符
  • 【系统架构设计师】数据库设计(一):数据库技术的发展、数据模型、数据库管理系统、数据库三级模式
  • 审核问题——首次进入APP展示隐私政策弹窗
  • 大模型(一)什么是 MCP?如何使用 Charry Studio 集成 MCP?
  • 深分页实战
  • 计算机网络:HTTP、抓包、TCP和UDP报文及重要概念
  • GPT5的Test-time compute(测试时计算)是什么?
  • Legion Y7000P IRX9 DriveList
  • HTTP 与 HTTPS 深度解析:从原理到实际应用
  • 链表OJ习题(1)
  • 1. 并发产生背景 并发解决原理