潘少   >   标签墙   >   协程 标签

次时代Java编程(一) Java里的协程

2019-08-09

什么是协程(coroutine)

这东西其实有很多名词,比如有的人喜欢称为纤程(Fiber),或者绿色线程(GreenThread)。其实最直观的解释可以定义为线程的线程。有点拗口,但本质上就是这样。

我们先回忆一下线程的定义,操作系统产生一个进程,进程再产生若干个线程并行的处理逻辑,线程的切换由操作系统负责调度。传统语言 C++ Java 等线程其实与操作系统线程是 1:1 的关系,每个线程都有自己的 Stack, Java 在 64 位系统默认 Stack 大小是 1024KB,所以指望一个进程开启上万个线程是不现实的。但是实际上我们也不会这么干,因为起这么多线程并不能充分的利用 CPU,大部分线程处于等待状态,CPU 也没有这么核让线程使用。所以一般线程数目都是 CPU 的核数。

coroutine.png

传统的 J2EE 系统都是基于每个请求占用一个线程去完成完整的业务逻辑,(包括事务)。所以系统的吞吐能力取决于每个线程的操作耗时。如果遇到很耗时的 I/O 行为,则整个系