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

推荐订阅源

T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
The Cloudflare Blog
博客园 - 聂微东
博客园 - 司徒正美
量子位
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
Y
Y Combinator Blog
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
A
About on SuperTechFans

博客园 - KLAPT

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 sudo命令和su 的区别 java -cp 和 java -jar
进程、线程、协程
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 内存