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

进程/线程?并发/并行?

进程/线程?并发/并行?

1.引子

下面这张图片非常生动形象地描述了进程与线程和它们之间的关系。



2.进程

2.1.什么是进程

系统分配资源的基本单位。
进程是程序运行所需的完整环境,是一个活动的实体,不仅包含程序代码,还包含以下内容:

  • 堆栈(Stack):用于存储函数参数、局部变量等临时数据
  • 数据段(Data Section):用于存储全局变量
  • 堆(Heap):运行时动态分配的内存区域

ps:甚至可以包含文件列表、输入输出设备等。

2.2.进程控制块(Process Control Block)

进程控制块(PCB)是操作系统中用于描述进程状态和属性的数据结构。它包含以下信息:

  • 进程状态
  • 程序计数器(PC)
  • CPU寄存器状态
  • 内存管理信息
  • 调度信息

2.3.进程状态

进程在其生命周期中会经历多个状态转换:

  • 新建(New):进程刚被创建
  • 就绪(Ready):等待 CPU 调度执行
  • 运行(Running):正在执行
  • 等待(Waiting):等待 I/O 或其他事件完成
  • 终止(Terminated):执行完成或被强制终止

下面是更为详细的七态图:

  • 挂起(静止)就绪:进程具备运行条件但目前在二级存储器中,只有当它被调换到主存才能被调度执行。
  • 挂起(静止)等待:进程正在等待某一个事件且在二级存储器中。

2.4.进程类型

  • 独立进程
    不与其它进程共享数据或相互影响的进程

  • 协作进程
    需要与其它进程共享数据或协同工作的进程
    但是进程之间是本来是相互独立的,那么协作进程是怎么进行的,这就涉及了——进程通信(IPC)

2.5.进程通信

内存共享

顾名思义,就是多个进程共享一个内存空间。
一个进程将数据写入共享的内存空间,另一个进程从中读取,实现通信。

ps: 开辟这块共享的内存空间是需要系统调用的,但接下来操作内存无需系统调用。

消息传递

类似"邮箱"(端口),可以设立消息缓冲区,处于操作系统空间,需要提供系统调用 ( send(), receive() ) 来发送和接收信息。
在这种模式下,进程通过操作系统传递消息进行通信:

  • 直接通信:进程直接指定发送或接收方
    例如:send(B, message) 表示 A 向 B 发送消息

  • 间接通信:通过邮箱(mailbox)传递消息
    例如:send(X, message) 表示发送到邮箱 X

  • 同步机制:发送或接收时可选择阻塞或非阻塞模式

  • 缓冲机制:消息可暂存于队列中,队列容量可为 0(无缓冲)、有限或无限

管道、套接字和远程过程调用等都是属于消息传递。
监听端口:保持开放,接收所有进程的消息。



3.线程

3.1.什么是线程

CPU调度和执行的基本单位。
线程本身不包含代码,通过程序计数器指向特定代码段(打破一个进程拥有单一PC的限制),同时每个线程拥有自己的栈空间,从而可以并发处理特定代码段。

一个进程可以有多个线程,而且同一进程中的线程共享资源,调度所需的成本远小于进程。

3.2.线程的实现方式

  • 内核级线程(Kernel-level Thread):由操作系统直接管理,调度开销大,但支持真正的并发。
  • 用户级线程(User-level Thread):由线程库在用户空间管理,创建和切换快,但无法利用多核CPU。
  • 混合线程(Hybrid Thread):结合上述两种方式,如 Java 的线程模型就是基于操作系统线程实现的。


4.并发与并行

并发:通过快速切换上下文(或者是CPU调度),以达到同一时刻处理多个任务的"假象";
并行:真正同时执行多个任务(通过多核CPU)。

上下文:就是进程所处环境的状态,包括PC、CPU寄存器的数据、主存的内容。

中断触发时,CPU硬件会自动做:
1.切换到内核栈;
2.把PC等数据压入栈;
3.跳转到中断处理程序。

数据并行

数据分配到多个核心,同时执行相同操作

比如,在对一个数组判断其中质数的个数时,将数组分为多组,同时进行判断计数。

任务并行

数据可以相同,也可以不同,同时执行不同操作

比如,对一个数组同时执行max, min, avg操作;
也可以是对两个数组,一个执行max,另一个执行min。

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

相关文章:

  • 2026年港澳通行证照片手机拍摄保姆级教程:规格要求与拍摄方法详解
  • WSABuilds终极指南:在Windows 10/11上轻松运行Android应用
  • 企业网盘与个人网盘选购指南:20款云盘深度解析
  • 免费开源视频剪辑的终极指南:Avidemux如何让视频处理变得简单高效
  • 题解:AcWing 4548 猴子和香蕉
  • 5. 迁移学习
  • 机器学习加速PIC仿真:MLP与CNN在等离子体初始条件预测中的应用
  • 长期使用感受,Taotoken的API服务稳定性与低延迟体验记录
  • 终极高效音乐歌词提取方案:跨平台批量下载与格式转换全解析
  • 从API密钥管理界面看Taotoken在安全与权限管控上的设计
  • 基于Python的规则引擎:从零构建症状筛查聊天机器人
  • 如何永久保存微信聊天记录:WeChatMsg完整备份方案指南
  • NVIDIA H100 GPU架构与vLLM框架优化实践
  • 3个实用技巧教你用kepano-obsidian模板打造高效个人知识管理系统
  • 登录界面存在问题-------验证码不会自动更新
  • 2026学生党平价控油蓬松洗发水权威推荐榜 - 品牌评测官
  • 【深度解读】中央定调!“人工智能+”全面实施,开发者如何抓住AI产业化与产业AI化的时代红利?
  • 5分钟实现Honey Select 2完整本地化:一站式游戏体验增强方案
  • 机器学习回归模型在政策冲击下股市预测的实战对比:线性回归、SVR、随机森林与kNN
  • 鸿蒙PC:Qt适配OpenHarmony实战【人名录】:单机联系人卡片,不读系统通讯录也能演示详情联动
  • 你的差异基因结果可靠吗?用R包MetaVolcanoR做个Meta分析来验证和增强发现
  • 从所有权机制到产业重构:Rust语言的十年演进与生态全景
  • 2026年5月亨得利官方售后网点实地考察与权威评测报告(含新增与迁址门店) - 亨得利钟表维修中心
  • Windows流媒体服务器SRS终极部署指南:5分钟搭建高性能视频传输系统
  • Windows安卓应用安装新方案:APK安装器如何实现原生级体验?
  • Taotoken 在多模型聚合场景下的路由与容灾机制解析
  • FM3450C 3 节串联用锂电池保护 IC
  • 最近发现一个神奇网站!用50行代码实现微信自动回复机器人
  • 什么是GEO全栈获客服务
  • 数据流降采样技术:Downstream库的核心原理与应用