虚拟线程和传统线程的区别

张开发
2026/4/11 18:57:36 15 分钟阅读

分享文章

虚拟线程和传统线程的区别
虚拟线程Virtual Threads是由JVM 用户态管理的轻量级线程而传统线程Platform Threads是与操作系统内核线程一一绑定的重量级线程。核心区别在于管理主体、资源占用、调度方式与并发规模。一、核心原理与映射关系传统线程1:1 映射一个 Java 线程 一个 OS 内核线程。创建、切换、销毁都需操作系统内核介入用户态 ↔ 内核态切换。数量受 OS 线程上限与内存严格限制。虚拟线程M:N 映射由JVM 直接管理用户态调度不直接绑定内核线程。多个虚拟线程挂载到少量 ** 载体线程Carrier Thread即传统线程** 上执行。JVM 负责调度无需 OS 介入切换成本极低。二、关键区别对比表格表格特性传统线程 (Platform Threads)虚拟线程 (Virtual Threads)管理方操作系统内核JVM用户空间内存开销大栈默认1MB~2MB极小初始栈几 KB动态伸缩创建成本高系统调用、内存分配极低近乎对象创建最大数量数千数万受 OS 限制数百万 JVM 内存允许即可上下文切换高内核态切换、保存完整寄存器极低用户态、仅保存少量状态阻塞行为阻塞时内核线程挂起资源闲置I/O 阻塞时自动卸载载体线程线程复用适用场景CPU 密集型I/O 密集型网络、DB、文件等编程模型同步 / 异步混合完全兼容同步代码无侵入改造三、性能与适用场景传统线程优点CPU 密集型效率高直接利用多核。缺点高并发下资源爆炸I/O 阻塞时资源浪费严重。场景科学计算、视频编码、大数据计算。虚拟线程优点高并发 I/O 场景王者。百万连接仅占几百 MB 内存I/O 阻塞不阻塞载体线程吞吐量大幅提升。缺点CPU 密集型无优势JVM 调度 overhead。场景Web 服务、API 网关、数据库连接、消息队列等。四、代码与使用差异Java 示例传统线程java运行// 重量级数量受限 Thread t new Thread(() - { // 业务逻辑 }); t.start();虚拟线程JDK 21java运行// 轻量级可百万创建 Thread vt Thread.startVirtualThread(() - { // 同一段同步代码无需改造 });五、总结传统线程OS 线程的直接映射重、贵、少、适合 CPU 密集。虚拟线程JVM 轻量级协程轻、廉、多、I/O 密集场景的最优解。

更多文章