计算机操作系统(五) 前趋图和程序执行与进程的描述(附带图谱表格更好对比理解))
计算机操作系统(五) 前趋图和程序执行与进程的描述
- 前言
- 一、前趋图和程序执行
- 1.1前趋图
- 1.2程序的顺序执行
- 1.3程序的并发执行
- 二、进程的描述
- 2.1进程的定义与特征
- 2.2进程的基本状态与转换
- 2.3挂起的操作系统和进程的转换
- 2.4进程管理中的数据结构
- 总结(核心概念速记):
- **知识图谱**
- **重点提炼**
前言
- 在上一篇博客中,我们深入探讨了操作系统的结构与系统调用,了解了操作系统不同结构的特点、优缺点以及系统调用的基本概念和类型。
- 了解这些知识后,我们对操作系统的内部机制和应用程序与操作系统的交互方式有了更全面的认识。
- 本篇博客将继续深入操作系统的世界,聚焦于前趋图和程序执行以及进程的描述这两个重要方面。
- 通过学习这些内容,你会对操作系统中程序的执行方式以及进程的相关概念有更清晰的理解,为后续深入学习操作系统的进程管理等知识打下坚实基础。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的操作系统博客专栏
https://blog.csdn.net/2402_83322742/category_12916780.html?spm=1001.2014.3001.5482
一、前趋图和程序执行
1.1前趋图

前趋图(Precedence Graph)是一个有向无环图(DAG, Directed Acyclic Graph),用于描述程序中各个操作之间的先后顺序关系。图中的每个节点代表一个操作(可以是一条语句、一个程序段或进程等),有向边(箭头)表示操作之间的前趋关系,即箭头指向的操作必须在箭头出发的操作完成之后才能开始执行。
例如,假设有四个操作 S 1 S_1 S1、 S 2 S_2 S2、 S 3 S_3 S3、 S 4 S_4 S4,它们之间的关系为: S 1 S_1 S1 执行完后 S 2 S_2 S2 和 S 3 S_3 S3 才能执行, S 2 S_2 S2 和 S 3 S_3 S3 都执行完后 S 4 S_4 S4 才能执行。用前趋图表示如下:
S1/ \S2 S3\ /S4
前趋图的作用在于清晰地展示操作之间的依赖关系,帮助我们分析程序的执行顺序,尤其是在程序并发执行时,确定哪些操作可以并行执行,哪些操作需要顺序执行,从而更好地进行程序的设计和优化。
1.2程序的顺序执行
程序的顺序执行是指程序中的操作按照它们在代码中出现的先后顺序依次执行,前一个操作执行完成后,才会执行下一个操作。在顺序执行的情况下,程序具有以下特征:
- 顺序性:操作严格按照顺序依次执行,不会出现交叉或并发执行的情况。
- 封闭性:程序在执行过程中,其执行结果只取决于程序本身,不受外界因素的干扰,并且相同的输入会得到相同的输出。
- 可再现性:只要初始条件相同,程序无论执行多少次,结果都是一样的。
例如,下面是一个简单的 C 语言程序顺序执行的示例:
#include <stdio.h>int main() {int a = 5;int b = 3;int c = a + b;printf("The result is: %d\n", c);return 0;
}
在这个程序中,先定义变量 a 和 b,然后计算它们的和并赋值给 c,最后输出结果。每个操作都是顺序执行的,前一个操作完成后才会进行下一个操作。
1.3程序的并发执行

随着计算机硬件技术的发展,为了提高系统的资源利用率和执行效率,程序的并发执行变得越来越常见。程序的并发执行是指多个程序或程序的多个部分在同一时间间隔内同时执行。
例如,在一个多任务操作系统中,我们可以同时运行文本编辑器进行文字编辑,同时运行音乐播放器播放音乐。这两个程序的执行就是并发执行的。
与顺序执行相比,并发执行具有以下特点:
- 间断性:由于多个程序共享系统资源(如 CPU、内存等),它们的执行过程可能会被中断和切换,导致执行过程具有间断性。
- 失去封闭性:并发执行的程序可能会相互影响,一个程序的执行结果可能会受到其他程序的干扰,不再像顺序执行那样具有封闭性。
- 不可再现性:由于并发执行的不确定性,即使初始条件相同,每次执行的结果也可能不同。
例如,假设有两个进程 P1 和 P2,它们都要对共享变量 x 进行操作。P1 要将 x 的值加 1,P2 要将 x 的值减 1。如果它们并发执行,由于执行顺序的不确定性,最终 x 的值可能不是初始值,这就体现了并发执行的不可再现性。
二、进程的描述
2.1进程的定义与特征

进程(Process)是操作系统中最基本、最重要的概念之一。进程可以定义为程序的一次执行过程,它是系统进行资源分配和调度的基本单位。
进程具有以下特征:
- 动态性:进程是程序的执行过程,它有一定的生命周期,从创建、运行到终止,是一个动态的过程。
- 并发性:多个进程可以在同一时间间隔内同时运行,它们可以并发执行,提高系统的资源利用率。
- 独立性:进程是独立运行的实体,每个进程都有自己独立的地址空间、资源和执行上下文,进程之间相互独立,互不干扰。
- 异步性:由于进程的执行受到系统调度的影响,它们的执行速度是不确定的,具有异步性。
- 例如,我们打开一个浏览器,浏览器就是一个进程,它在运行过程中可以同时加载多个网页,每个网页的加载可以看作是浏览器进程中的一个子任务,这些子任务并发执行,体现了进程的并发性和动态性。
2.2进程的基本状态与转换

进程在其生命周期中会处于不同的状态,常见的基本状态有以下三种:
- 就绪状态(Ready):进程已经准备好运行,只等待 CPU 资源分配。在就绪队列中等待的进程处于就绪状态。
- 运行状态(Running):进程正在 CPU 上运行。在单 CPU 系统中,同一时刻只有一个进程处于运行状态。
- 阻塞状态(Blocked):进程由于等待某一事件(如 I/O 操作完成、等待信号量等)而暂时无法运行,此时进程会进入阻塞状态,直到所等待的事件发生。
进程的状态可以在一定条件下相互转换,具体的转换关系如下:
- 就绪 -> 运行:当 CPU 空闲时,操作系统会从就绪队列中选择一个进程,将其状态转换为运行状态,这个过程称为进程调度。
- 运行 -> 就绪:当运行进程的时间片用完,或者有更高优先级的进程进入就绪队列时,当前运行进程会被暂停,状态转换为就绪状态,等待下一次被调度。
- 运行 -> 阻塞:当运行进程需要等待某一事件发生(如读取文件数据)时,它会主动放弃 CPU,进入阻塞状态,等待事件完成。
- 阻塞 -> 就绪:当进程所等待的事件发生后(如文件数据读取完成),进程会从阻塞状态转换为就绪状态,进入就绪队列等待调度。
2.3挂起的操作系统和进程的转换
在操作系统中,除了上述三种基本状态外,还有一种挂起状态(Suspended)。挂起状态是为了满足系统管理和资源调度的需要而引入的。
挂起状态分为两种:
- 就绪挂起(Ready Suspended):进程处于就绪状态,但被挂起,此时进程被放到外存(如硬盘)上,而不是内存中。当系统需要调度该进程时,需要先将其从外存调入内存。
- 阻塞挂起(Blocked Suspended):进程处于阻塞状态,并且被挂起,同样被放到外存上。当所等待的事件发生后,进程会先转换为就绪挂起状态,然后再根据需要调入内存转换为就绪状态。
进程在挂起状态和其他状态之间的转换关系如下:
- 就绪 -> 就绪挂起:当系统内存资源紧张时,操作系统可能会将一些就绪进程挂起,将其状态转换为就绪挂起,以释放内存资源。
- 就绪挂起 -> 就绪:当系统内存资源充足时,或者有其他进程结束运行释放了内存,操作系统可以将就绪挂起的进程调入内存,将其状态转换为就绪状态。
- 阻塞 -> 阻塞挂起:类似地,当系统需要释放内存资源时,可能会将一些阻塞进程挂起,转换为阻塞挂起状态。
- 阻塞挂起 -> 就绪挂起:当阻塞挂起的进程所等待的事件发生后,进程会转换为就绪挂起状态。
- 运行 -> 就绪挂起:在某些情况下,如系统需要进行内存整理或有更高优先级的进程需要运行,正在运行的进程可能会被直接挂起,转换为就绪挂起状态。
2.4进程管理中的数据结构

为了有效地管理进程,操作系统需要使用一些数据结构来记录进程的相关信息。常见的进程管理数据结构有:
- 进程控制块(PCB, Process Control Block):是操作系统中最重要的数据结构之一,它记录了进程的所有信息,包括进程标识符、进程状态、优先级、程序计数器、寄存器值、内存指针、I/O 状态信息、父子进程关系等。每个进程都有一个唯一的 PCB,操作系统通过 PCB 来管理和控制进程的运行。
- 就绪队列:用于存储处于就绪状态的进程。当 CPU 空闲时,操作系统会从就绪队列中选择一个进程进行调度。
- 阻塞队列:用于存储处于阻塞状态的进程。当进程所等待的事件发生时,操作系统会从阻塞队列中找到相应的进程,并将其状态转换为就绪状态。
例如,在 Linux 操作系统中,进程控制块是一个名为 task_struct 的结构体,它包含了大量的成员变量来描述进程的各种信息。操作系统通过操作 task_struct 结构体来实现对进程的创建、调度、终止等管理操作。
总结(核心概念速记):
核心概念速记
操作系统之程序执行与进程描述 = 前趋图指引程序执行 + 进程概念及状态转换 + 数据结构支撑进程管理
- 前趋图与程序执行:
- 前趋图为有向无环图,展示操作先后顺序,助于分析程序执行,确定并行与顺序操作。
- 程序顺序执行具顺序性、封闭性、可再现性;并发执行具间断性、失封闭性、不可再现性,能提高资源利用率。
- 进程相关概念:
- 进程是程序执行过程,是资源分配和调度基本单位,具动态性、并发性、独立性、异步性。
- 基本状态:就绪(等 CPU)、运行(占 CPU)、阻塞(等事件),状态可依条件转换,如时间片用完、事件发生等。
- 挂起状态分就绪挂起和阻塞挂起,因内存管理等需求引入,状态转换与内存资源及事件相关。
- 进程管理数据结构:
- 进程控制块(PCB)记录进程全面信息,是管理控制进程关键。
- 就绪队列存就绪进程,阻塞队列存阻塞进程,为进程调度提供数据支持。
程序执行方式对比
| 执行方式 | 特点 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 顺序执行 | 操作按序依次执行,结果确定 | 逻辑简单,易理解调试,结果可再现 | 资源利用率低,执行效率低 | 简单任务,对结果确定性要求高场景 |
| 并发执行 | 多程序或部分同时执行,结果不确定 | 提高资源利用率和系统效率,可同时处理多任务 | 执行逻辑复杂,结果不可再现,易相互干扰 | 多任务处理,对资源利用率要求高场景 |
进程状态及转换关系
状态转换 → 条件 → 说明 ↓ ↓ ↓ 就绪 -> 运行 → CPU 空闲调度 → 进程获 CPU 资源开始运行 运行 -> 就绪 → 时间片用完或高优先级进程就绪 → 进程暂停等待下次调度 运行 -> 阻塞 → 等待事件发生 → 进程因事件暂停运行 阻塞 -> 就绪 → 事件发生 → 进程恢复可运行状态 就绪 -> 就绪挂起 → 内存紧张 → 进程被移至外存释放内存 就绪挂起 -> 就绪 → 内存充足 → 进程调回内存准备运行 阻塞 -> 阻塞挂起 → 内存紧张 → 阻塞进程被挂起 阻塞挂起 -> 就绪挂起 → 事件发生 → 挂起阻塞进程转就绪挂起 运行 -> 就绪挂起 → 内存整理或高优先级进程需求 → 运行进程被挂起
知识图谱
计算机操作系统(五) 前趋图和程序执行与进程的描述
├─ 前趋图和程序执行
│ ├─ 前趋图(有向无环图,表操作顺序)
│ ├─ 程序顺序执行(三特性:顺序、封闭、可再现)
│ └─ 程序并发执行(三特性:间断、失封闭、不可再现)
├─ 进程的描述
│ ├─ 进程定义与特征(动态、并发、独立、异步)
│ ├─ 进程基本状态与转换(就绪、运行、阻塞及转换)
│ ├─ 挂起状态及转换(就绪挂起、阻塞挂起及转换)
│ └─ 进程管理数据结构(PCB、就绪队列、阻塞队列)
├─ 关键术语
│ ├─ 前趋图、顺序执行、并发执行
│ ├─ 进程、就绪、运行、阻塞、挂起
│ ├─ 进程控制块(PCB)、就绪队列、阻塞队列
└─ 应用与理解 ├─ 前趋图对程序设计优化作用 ├─ 进程状态转换对资源调度影响 └─ 数据结构在进程管理中意义
重点提炼
-
程序执行要点:
- 前趋图是分析程序执行顺序的有效工具,尤其在并发场景中。
- 理解顺序执行和并发执行特点,根据任务需求合理选择执行方式,平衡效率与结果确定性。
-
进程概念核心:
- 进程是操作系统核心概念,掌握其定义和特征是理解操作系统运行机制基础。
- 熟悉进程状态及转换条件,有助于理解系统资源调度和管理策略。
- 挂起状态是内存管理和进程调度重要补充,了解其转换关系可更好理解系统内存资源分配。
-
进程管理关键:
- 进程控制块是进程管理关键数据结构,操作系统通过它实现对进程全方位控制。
- 就绪队列和阻塞队列是进程调度基础,合理维护和操作队列可提高系统性能。
-
技术应用拓展:
- 在程序开发中,利用前趋图规划任务顺序,提高程序执行效率和稳定性。
- 在系统设计中,依据进程状态转换和管理数据结构,优化资源分配和调度算法。
进程管理数据结构对比表
| 数据结构 | 作用 | 关键信息 | 与进程状态关系 |
|---|---|---|---|
| 进程控制块(PCB) | 记录进程所有信息,用于管理控制进程 | 进程标识符、状态、优先级等 | 每种状态进程都有对应 PCB,依状态更新信息 |
| 就绪队列 | 存储就绪状态进程 | 进程指针等 | 存放就绪进程 PCB 指针,供 CPU 调度选取 |
| 阻塞队列 | 存储阻塞状态进程 | 进程指针、等待事件等 | 存放阻塞进程 PCB 指针,事件发生时唤醒转换状态 |
操作系统中程序执行与进程管理演进脉络
技术演进 —— 顺序执行(早期简单任务) → 并发执行(多任务需求) → 进程概念引入(资源管理调度) → 挂起状态及数据结构完善(内存管理优化) ↓ ↓ ↓ ↓
应用升级 —— 单一任务处理 → 多任务并行处理 → 复杂系统资源分配调度 → 高效内存管理与进程调度
以上就是对本次关于操作系统博客内容的总结,后续我们将深入探讨操作系统更多知识。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的操作系统博客专栏
https://blog.csdn.net/2402_83322742/category_12916780.html?spm=1001.2014.3001.5482
| 非常感谢您的阅读,喜欢的话记得三连哦 |

相关文章:
计算机操作系统(五) 前趋图和程序执行与进程的描述(附带图谱表格更好对比理解))
计算机操作系统(五) 前趋图和程序执行与进程的描述 前言一、前趋图和程序执行1.1前趋图1.2程序的顺序执行1.3程序的并发执行 二、进程的描述2.1进程的定义与特征2.2进程的基本状态与转换2.3挂起的操作系统和进程的转换2.4进程管理中的数据结构 总结&…...
“统计视角看世界”专栏阅读引导
根据文章主题和逻辑关系,我为您设计以下阅读引导方案: #mermaid-svg-xOnE2zTW20jz5myv {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-xOnE2zTW20jz5myv .error-icon{fill:#552222;}#mermaid…...
C/C++静态库的理解和制作
1.什么是库 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。 本质上来说库是⼀种可执行代码的二进制形式,可以被操作系统…...
【redis】主从复制:单点问题、配置详解、特点详解
文章目录 单点问题什么是主从复制主从模式能解决的问题并发量有限可用性问题 配置建立复制通过配置文件来指定端口配置主从查看集群结构 断开复制 特点安全性只读传输延迟 单点问题 分布式系统中,涉及到一个非常关键的问题:单点问题 某个服务器程序&…...
OpenCV HighGUI 模块使用指南(Python 版)
用户让我编写一个 HighGUI 模块的使用指南,包括函数的使用和应用场景的实现。首先,我需要回顾 HighGUI 模块的主要功能:图像显示、视频捕获、鼠标和键盘事件。然后,按照用户提供的结构,整理每个部分的函数详解、代码示…...
PyTorch 面试题及参考答案(精选100道)
PyTorch 的动态计算图与 TensorFlow 的静态计算图有何区别?动态图的优势是什么? PyTorch 的动态计算图和 TensorFlow 的静态计算图在构建方式、灵活性和调试难度等方面存在显著区别。 在构建方式上,TensorFlow 的静态计算图需要先定义好整个…...
android......
事件源,就是视图对象,先注册一个监听器,等待用户触发了屏幕,一旦触发会立即产生一个事件源,事件源会生成一个用户点击的触发事件,此刻监听器会立马监听到 ,然后监听器调用回调方法 UI理解 全称用…...
常见中间件漏洞(tomcat)
CVE-2017-12615 当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产生,(需要允许put请求) , 攻击者可以利用PUT方法通过精心构造的数据包向存在漏洞的服务器里面上传…...
计算机网络高频(二)TCP/IP基础
计算机网络高频(二)TCP/IP基础 1.什么是TCP/IP⭐⭐ TCP/IP是一种网络通信协议,它是互联网中最常用的协议之一。TCP/IP有两个基本的协议:TCP(传输控制协议)和IP(互联网协议)。 TCP(Transmission Control Protocol,传输控制协议)是一种可靠的、面向连接的协议。它负…...
国际护士节知识竞赛主持稿串词
在这充满火热激情的季节,我们又迎来了5.12国际护士节。让我们首先向辛勤奋战在护理工作一线的全县广大护士姐妹们道一声: (男)让我们再一次以热烈的掌声欢迎他们:预祝各参赛代表队在护理知识竞赛中赛出风格,赛出水平,取得满意的成绩。 (女)…...
Elasticsearch:可配置的推理 API 端点分块设置
作者:来自 Elastic Daniel Rubinstein Elasticsearch 开放推理 API 现已支持可配置的分块,以便在文档摄取时处理语义文本字段。 Elasticsearch 推理 API 允许用户利用各种提供商的机器学习模型执行推理操作。其中一个常见用例是在索引中支持用于语义搜索…...
数据结构之链表(双链表)
目录 一、双向带头循环链表 概念 二、哨兵位的头节点 优点: 头节点的初始化 三、带头双向链表的实现 1.双链表的销毁 2.双链表的打印 3.双链表的尾插和头插 尾插: 头插: 4.双链表的尾删和头删 尾删: 头删: …...
uniapp从 vue2 项目迁移到 vue3流程
以下是必须为迁移到 vue3 进行调整的要点,以便 vue2 项目可以在 vue3 上正常运行。 1. 在index.js中创建应用程序实例 // Before - Vue 2 import Vue from vue import App from ./App // with no need for vue3 Vue.config.productionTip false // vue3 is no lon…...
案例:网络命名空间模拟隔离主机场景
场景描述 假设我们需要在同一台物理机上模拟两台独立的主机(Host A 和 Host B),它们分别位于不同的网络命名空间中,并通过虚拟以太网对(veth pair)进行通信。目标是展示网络命名空间的隔离性和跨命名空间的…...
23种设计模式-生成器(Builder)设计模式
工厂方法设计模式 🚩什么是生成器设计模式?🚩生成器设计模式的特点🚩生成器设计模式的结构🚩生成器设计模式的优缺点🚩生成器设计模式的Java实现🚩代码总结🚩总结 🚩什么…...
算法训练营第二十二天 | 回溯算法(四)
文章目录 前言一、Leetcode 491.递增子序列二、Leetcode 46.全排列三、Leetcode 47.全排列Ⅱ 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启…...
NLP高频面试题(十一)——RLHF的流程有哪些
随着大语言模型(如GPT系列)的快速发展,RLHF(Reinforcement Learning from Human Feedback,即基于人类反馈的强化学习)逐渐成为训练高质量模型的重要方法。本文将简单清晰地介绍RLHF的整体流程。 一、RLHF …...
测试用例设计方法与Prompt转化:一键生成高效提示词的实用指南
在测试工程师的日常工作中,设计测试用例是确保软件质量的关键环节。然而,如何快速、高效地设计出覆盖率高、逻辑严密的测试用例却是一个常见的挑战。本文将结合常用的测试用例设计方法,探索如何通过Prompt(提示词)转化…...
蓝桥杯备考:BFS最短路径之Meteor Shower S流星雨
本题是一个BFS最短路问题,我们可以先把时刻的矩阵搞出来,哪些时刻哪些方块儿不能走用来剪枝 如果第一次走到永远不会被扎到的区域,那时候就是我们的最短距离 定义方向向量 #include <iostream> #include <queue> #include <c…...
【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 RESTful API 设计:从上手到骨折
<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整活…...
【深度学习与大模型基础】第8章-概率分布
一、概率质量函数 什么是概率质量函数? 概率质量函数是用来描述离散随机变量的概率分布的工具。它告诉我们,某个离散随机变量取某一个特定值的概率是多少。 举个例子:抛硬币 假设你有一个程序,模拟抛硬币的结果。硬币有两个可能…...
数据结构5(初):排序
目录 1、排序的概念以及常见的排序算法 1.1、排序的概念 1.2、常见的排序算法 2、常见排序算法的实现 2.1、插入排序 2.1.1、直接插入排序 2.1.2、希尔排序 2.2、选择排序 2.2.1、直接选择排序 2.2.2、堆排序 2.3、交换排序 2.3.1、冒泡排序 2.3.2、快速排序 2.3.…...
表达式括号匹配(stack)(信息学奥赛一本通-1353)
【题目描述】 假设一个表达式有英文字母(小写)、运算符(,—,∗,/)和左右小(圆)括号构成,以“ ”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号…...
RabbitMQ 详细原理解析
RabbitMQ 是一个基于 AMQP(Advanced Message Queuing Protocol) 协议的开源消息代理中间件,广泛用于分布式系统中的异步通信、服务解耦、流量削峰等场景。其核心设计围绕生产者、消费者、队列、交换机和虚拟主机等组件,结合 AMQP …...
2025-03-23 学习记录--C/C++-C语言 sprintf()实现将多个值按指定格式拼接成字符串
C语言 sprintf()实现将多个值按指定格式拼接成字符串 举个例子 🌰:将字符串 “m” 与数字 0、1、2 动态拼接成 “m0”、“m1”、“m2”:👇🏻 #include <stdio.h> // 包含标准输入输出库,用于使用输入…...
【小程序开发】完整项目结构长啥样?
Hello,欢迎来到AI技术库。AI写代码的时代,人人都可以成为程序员。欢迎继续【小程序开发】系列课。上节课中,我们学习了【手把手教你小程序开发】什么是大前端?,本节课,我们学习第二篇 小程序的完整项目结构。 本文适合阅读对象: 1. 非计算机专业AI爱好者;2. 小程序开发…...
JVM的组成及各部分的作用
JVM(Java虚拟机)是Java程序运行的核心环境,负责将Java字节码转换为机器码并执行。以下是JVM的主要组成部分及其作用: 1. 类加载器子系统(Class Loader Subsystem) 作用 加载:将 .class 文件加载…...
计算机网络精讲day2———计算机网络的性能指标(下)
性能指标5:时延带宽积 时延带宽积传播时延*带宽 这里要注意是传播时延不是发送时延 重点:管道法解析时延带宽积 我们以一个圆柱形管道来代表链路,管道的长度是链路的传播时延(以时间作为单位单位表示链路长度)&#x…...
Android LiveData 的 `setValue` 与 `postValue` 区别详解
Android LiveData 的 setValue 与 postValue 区别详解 一、核心区别 线程限制 • setValue:必须且仅能在主线程调用,否则会抛出 IllegalStateException。 • postValue:可在任意线程调用,内部通过 Handler 将任务切换到主线程执行 setValue。 数据更新机制 • setValue:同…...
【多线程】初始线程和Thread类
一. 线程 1. 线程的引入 虽然进程已经可以解决并发编程这种问题,但是进程在频繁进行创建和销毁的时候,系统开销非常大,如果一个服务器向你发送多个请求,针对每一个请求,都需要创建一个进程来应答,每个进程…...
