并发(Concurrency)
操作系统是支持应用程序的系统软件;
应用程序由代码和数据构成的软件
使用syscall等指令调用操作系统API(程序级调度)
什么是并发?
为什么需要并发?
(共享内存)多处理器上的并发程序?
并发(concurrency)与并行(parallelism)
Concurrent: existing happening or done at the same time.
比如两个Java程序以不同的顺序执行,但是不会影响最终结果的正确性。即并发的体现!
并发性的来源: 进程会调用操作系统的API
- 并发(Concurrency): 多个执行流可以不按照一个特定的顺序执行。
- 并行(parallelism): 允许多个执行流同时执行(多个处理器)
线程
线程:多个执行流并发/并行执行,并且它们共享内存。
- 两个执行流共享代码和所有全局变量(数据、堆区)
- 线程之间指令的执行顺序是不确定的(non-deterministic)
线程:什么该共享、什么不共享?
- 共享代码:所有线程的代码都来自当前进程的代码
- 共享数据:全局数据/堆区可以自由引用
- 独立堆栈:每个线程有独立的堆栈
操作系统封装线程API
-
create(fn)
- 创建并运行一个线程,该线程立即开始执行函数fn
- 函数原型void fn(int tid)
- tid是从1开始编号
-
join(fn)
- 等待所有线程执行结束
- 执行函数fn
- 只能join一次
理解并发程序的执行
状态机视角下的程序执行
有限状态机 Finite State Machine(FSM)
程序 = 有限状态机
(操作系统上的)程序执行时,状态是有限的
- 寄存器(包括PC指针)
- 内存:代码、数据、堆栈(暂时假设内存静态分配)
“程序 = 状态机 = 有向图”是一种理解程序、分析程序的工具
线程共享代码和数据
拥有独立的寄存器和堆栈
- 堆栈也位于同一个地址空间中
- 允许把局部变量的指针(&local_var)传递给另一个线程
学而不思则罔,思而不学则殆!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具