首页/案例库/进程、线程与协程
入门操作系统

进程、线程与协程

并发编程的三个抽象层次

进程是资源隔离的单位,线程是 CPU 调度的单位,协程是用户态的轻量并发单元。三者在创建开销、内存消耗、切换代价上差异巨大。理解它们的本质区别,是写出高性能并发程序的基础。

进程线程协程上下文切换PCBGo 协程用户态线程
STEP_1
写时复制(Copy-on-Write)是 fork 的性能优化:子进程初始时与父进程共享物理内存页,只有当某方尝试写入时才真正复制该页。这使得 fork+exec 的模式(创建子进程立即执行新程序)非常高效,因为共享的内存页根本不需要复制。
资源隔离的基本单位 — PROCESSING
process.log
// Linux fork() 创建进程
pid_t pid = fork();

if (pid == 0) {
  // 子进程:拥有完整独立的地址空间副本
  // 修改变量不影响父进程(写时复制 COW)
  printf("Child PID: %d\n", getpid());
  execve("/bin/ls", args, env);  // 替换进程映像
} else {
  // 父进程
  printf("Parent, child PID: %d\n", pid);
  waitpid(pid, &status, 0);      // 等待子进程退出
}

// 进程控制块 PCB 包含:
// - PID / PPID
// - 虚拟地址空间映射
// - 打开的文件描述符表
// - 信号处理函数表
// - CPU 寄存器快照(上下文)

进程进程是操作系统分配资源(内存、文件描述符、网络端口)的基本单位。每个进程拥有独立的虚拟地址空间,进程间通过 IPC(管道、Socket、共享内存)通信。创建进程需要 fork() 复制父进程的完整内存空间,代价高昂(典型耗时 1-10ms)。

实时沙盒SANDBOX
FAULT_INJECTED
快速场景
手动调节
并发单元数量
同时运行的进程/线程/协程数
1000
并发数适中,系统负载正常
并发单元类型
影响内存消耗和切换代价
协程适合大规模 IO 并发
IO 密集型负载
关闭表示 CPU 密集型