并发(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)传递给另一个线程
posted @   Felix_Openmind  阅读(933)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
*{cursor: url(https://files-cdn.cnblogs.com/files/morango/fish-cursor.ico),auto;}
点击右上角即可分享
微信分享提示