惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
Microsoft Azure Blog
Microsoft Azure Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
Y
Y Combinator Blog
博客园_首页
有赞技术团队
有赞技术团队
博客园 - Franky
腾讯CDC
G
Google Developers Blog
Recent Announcements
Recent Announcements
博客园 - 【当耐特】
D
Docker
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
H
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
A
About on SuperTechFans
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
V
V2EX
U
Unit 42
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学

博客园 - KLAPT

Spring Web MVC 中,过滤器(Filter) 和 拦截器(Interceptor) SpringBoot API 接口防刷 ROW_NUMBER() 一台服务器最大能支持多少条 TCP 连接 Gateway 网关 CodeX =>Skills Redis 内存满了怎么处理 SpringBoot 默认配置修改 JWT 续签 Access Token + Refresh Token 双 Token claudeCode 命令 MyBatis 的 Mapper 接口 AI | CC GUI 集成 IDEA 完整教程 在IDEA中使用Claude Code IDEA中使用CodeX MyBatisPlus解决大数据量查询慢问题 idea 中的 claude code Token Dubbo 和 Spring Cloud Gateway的区别 Transactional 注解中propagation 掌握 Spring 框架这 10 个扩展点 SpringBoot 快速实现 api 加密 Spring Boot/Cloud 中 bootstrap.yml 与 application.yml SpringBoot 实现 DOCX 转 PDF 微服务Token鉴权设计的几种方案 RSA 加密 Java二维码 ntp服务端和客户端 Chronyd与NTP chronyd 作为服务器时钟 chrony
进程、线程、协程
KLAPT · 2026-05-06 · via 博客园 - KLAPT

进程是资源分配的基本单位,线程是 CPU 调度的基本单位,协程是用户态的轻量级线程。

三者是层级包含关系:一个进程里有多个线程,一个线程里可以跑多个协程。

2a4693121a102a42ee5e3a8c96142f8a

进程:资源分配的最小单位

 进程是操作系统分配资源的基本单位,每个进程有自己独立的内存空间——代码段、数据段、堆、栈全部隔离。// Java 中每个运行的 JVM 就是一个进程
public static void main(String[] args) {
    ProcessHandle current = ProcessHandle.current();
    System.out.println("PID: " + current.pid());
    System.out.println("进程信息: " + current.info());
}

进程的三个核心特点:

隔离性强 — 一个进程挂了不影响其他进程。Chrome 每个标签页用独立进程就是这个原因,一个页面崩了不会拖垮浏览器。

创建开销大 — 需要分配独立内存空间、复制父进程资源(写时复制),代价不低。

通信复杂 — 进程间通信(IPC)要走管道、消息队列、共享内存等机制,比线程间通信麻烦得多。

线程:CPU 调度的最小单位

线程是进程内的执行单元。同一进程内的多个线程共享内存空间,但各自有独立的栈和程序计数器。

关键点:Java 线程和 OS 线程是 1:1 的关系(传统模型),每个 Java Thread 都对应一个操作系统线程。

上下文切换开销。线程的调度由操作系统内核完成,每次切换都要:

  1.  从用户态切到内核态
  2.  保存当前线程的寄存器、程序计数器等上下文
  3.  恢复目标线程的上下文
  4.  可能导致 CPU 缓存(TLB)失效

一次线程切换大约 1~10 微秒。听起来不多?但如果你有上万个线程频繁切换,光上下文切换就能把 CPU 吃满。

d626a3c7a42f6ddb7a7e4604476f7e13

协程:用户态的轻量级线程

协程和线程最大的区别是:协程的切换由程序自己控制,不需要操作系统内核参与。

因为完全在用户态完成调度,不需要陷入内核态,所以切换速度极快。而且协程不需要操作系统分配栈空间(线程栈通常 1MB),一个协程可能只需要几 KB 内存