Java 中的线程是和操作系统的内核线程一一对应的。

    操作系统的内核线程的缺点:

    • 慢:上下文切换费事(1000 个时钟周期)
      • 调度时需要发起系统调用,在内核态和用户态之间转换
    • 大:独立的方法栈需要更多的空间

    协程:在单线里实现多任务的调度,并在单线程里维持多个任务间的切换

    协程的优点:

    • 快:始终占用 CPU,在用户态
    • 小:可以方便地实现上百万地并发度
      • JVM 的线程占用 < 1M
      • Go 的协程 goroutine 4KB

    注意:协程并没有解决多线程并发的任何问题