本篇文档解析 example-basic-06.kt,探讨为什么协程被称为“轻量级线程”。
1. 核心概念:协程 vs 线程
在传统的线程模型中,如果你创建 50,000 个线程,由于内存和系统调用开销,程序会迅速 OOM (OutOfMemoryError) 或崩溃。而协程可以轻松应对这种规模的任务。
代码解析
1 | fun main() = runBlocking { |
- 海量并发:
repeat(50_000)表示我们要启动五万个协程。 - 非线性等待:每个协程在
delay时都会交出控制权,但不会占用操作系统线程。
2. 深入理解:为什么不崩溃?
- 内存占用极小:协程本质上是运行在 JVM 堆内存中的一些对象。一个线程通常需要约 1MB 的栈内存,而一个协程只需几十到几百个字节。
- **调度器 (Dispatcher)**:协程运行在线程池之上。50,000 个协程实际上由几十个实际的线程(通常等于 CPU 核心数)来“轮流轮换”处理。
- 挂起 (Suspend) 的本质:当协程
delay时,它只是被调度器标记为“待办任务”,而不是让线程“死等”。线程会立即转而处理其他就绪的协程。
3. 开发者总结
协程极大地提高了并发处理效率,它不再受限于操作系统的线程数量,让我们能够以接近 1:1 的模型处理成千上万个异步任务(如高并发服务器请求、大规模 UI 数据流处理等)。