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

推荐订阅源

F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
有赞技术团队
有赞技术团队
www.infosecurity-magazine.com
www.infosecurity-magazine.com
大猫的无限游戏
大猫的无限游戏
爱范儿
爱范儿
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threatpost
V
Visual Studio Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - Franky
人人都是产品经理
人人都是产品经理
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The Cloudflare Blog
N
News and Events Feed by Topic
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
AWS News Blog
AWS News Blog
S
SegmentFault 最新的问题
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Spread Privacy
Spread Privacy
J
Java Code Geeks
博客园 - 聂微东
T
Tor Project blog
宝玉的分享
宝玉的分享
博客园 - 叶小钗
Webroot Blog
Webroot Blog
博客园 - 【当耐特】
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
H
Heimdal Security Blog
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
MongoDB | Blog
MongoDB | Blog
I
InfoQ
Security Latest
Security Latest
Martin Fowler
Martin Fowler
Hacker News: Ask HN
Hacker News: Ask HN
P
Privacy International News Feed
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
雷峰网
雷峰网
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cisco Blogs
H
Help Net Security
L
LINUX DO - 最新话题
L
LINUX DO - 热门话题

博客园 - KLAPT

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 Maven 项目打包:实现业务代码与第三方依赖分离 达梦数据库创建用户 梦数据库新增大字段报错问题 达梦数据库操作 MySQL UPDATE多表关联更新 达梦数据库 为HTTP POST请求设置请求体 在Java中调用第三方接口并返回第三方页面 Java调用第三方接口的方法 Nginx 之Rewrite 使用详解 linux 命令 Spring Boot项目中集成Spring Security OAuth2和Apache Shiro
进程、线程、协程
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 内存