程序
进程 process 多进程--进程池
线程 thread 多线程-线程池
协程 coroutine 异步通信
linux
独立的内存空间,包含代码、数据、堆栈等。进程还包含有关其状态和上下文信息的元数据,例如进程ID、优先级、打开的文件描述符
进程间通信(IPC)机制
ps (Process Status):最常用的静态查看命令
pstree:以树状结构显示进程和线程的父子关系
kill / pkill / killall:用于向进程发送信号,以终止或控制它们
nice / renice:用于调整进程的调度优先级(nice值
taskset:用于查看或设置进程的CPU亲和性
lsof (List Open Files):列出进程打开的文件
系统调用
创建、执行、终止、同步以及属性控制
fork() vfork() clone()
理论状态
新建态 (New) 对应进程刚被创建和
就绪态 (Ready):进程已获得除 CPU 外的所有资源,只等 CPU 分配时间片。此时它在运行队列(Run Queue)中排队。
运行态 (Running):进程正在 CPU 上执行指令。
阻塞态 (Blocked / Waiting):进程因等待某个事件(如 I/O 完成、锁释放、网络数据到达)而主动放弃 CPU。此时它在等待队列中。
终止态 (Terminated),已被回收的短暂瞬间。
实际状态
TASK_RUNNING 可运行状态
TASK_INTERRUPTIBLE 可中断睡眠 TASK_UNINTERRUPTIBLE 不可中断睡眠 EXIT_ZOMBIE 僵尸状态
TASK_STOPPED 暂停/跟踪状态
EXIT_DEAD 死亡状态
Cordis Fiber
Fiber 的状态流转
待定 PENDING 插件已被声明,但其所依赖的服务尚未就绪,因此处于等待状态。
加载中 LOADING 所有依赖已满足,正在执行插件的 apply 函数。
活跃 ACTIVE 插件已成功加载并正在运行。
失败 FAILED 插件的 apply 函数执行过程中抛出了错误。
卸载中 UNLOADING 插件正在执行卸载和资源清理工作。
已销毁 DISPOSED 插件已完全卸载,所有资源已被清理干净。
Java线程的生命周期包含 NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED 六个状态
C 语言:从底层构建
多进程:通过 POSIX 标准提供的 fork()、exec()、wait() 等系统调用实现进程的创建、执行和同步
多线程:主要依赖 POSIX 线程 (pthread) 库。它提供了一套完整的线程创建(pthread_create)、同步(互斥锁、条件变量)和销毁(pthread_join)的 API
协程:C 语言标准库没有直接支持。协程功能通过第三方库实现,
C++
多进程:可以继续使用 POSIX 的 fork() 等系统调用,也可以使用 C++11 标准库中
多线程:从 C++11 开始,标准库正式引入
C++20 标准协程:语言层面引入了 co_await、co_yield 和 co_return 三个关键字,提供了原生的无栈协程支持
Rust
多进程:标准库中的 std::process 模块提供了创建和管理子进程的功能。
多线程:标准库提供 std::thread 模块
Rust 没有将协程直接内置到语言中,而是通过 async/await 语法和 Future 特性
Go 语言
Goroutine:Go 的并发执行单元
Cangjie
M:N 调度:采用 M:N 线程模型
Cangjie 有栈协程 通过 spawn 关键字就能启动一个并发任务,并返回一个 Future 对象用于获取结果或控制任
Java
java.lang.Thread 是重量级的,与操作系统内核线程1:1 映射
虚拟线程 (Java 21+):通过 Project Loom 引入,虚拟线程是 JVM 管理的轻量级线
Java 的并发编程主要围绕多线程、多进程和协程(在现代 Java 中体现为虚拟线程
ProcessBuilder, Runtime.exec() Thread, Runnable, Callable, 线程
Quasar:一个知名的JVM协程库,通过字节码增强技术实现。它提供了Fiber类来表示协程
Java 21+: Thread.startVirtualThread
Scala
python
并发模型 核心模块 / 语法 适用场景
多进程 multiprocessing CPU 密集型计算
多线程 threading I/O 密集型任务,且使用同步库
协程 async/await 语法 + asyncio 库 异步编程
typescript
多进程 (child_process) import { exec } from 'child_process';
多线程 (worker_threads) import { Worker, isMainThread, parentPort, workerData } from 'worker_threads';
协程 (async/await)
多进程是 R 语言并行计算的基石,因为每个 R 进程都是单线程的
浙公网安备 33010602011771号