Java 中的fiber(轻量级线程/纤程/协程)

/ Java / 没有评论 / 169浏览

Part 1:Project Loom

原文链接:Project Loom: Fibers and Continuations for the Java Virtual Machine

Project Loom是一个正在孵化中的openjdk项目,它的目标是简化java高并发应用的开发。众所周知在操作系统中线程(OS kernel threads)是有限的资源,线程的切换需要消耗CPU,线程总数也总是受到物理资源、操作系统参数等限制。而现在的高并发系统对并发数的要求往往超过了线程池的容量,于是Project Loom希望引入fiber,作为所谓的轻量级线程。

目前java的Thread正是基于OS kernel threads实现,java程序员要么选择把百万级的(阻塞)任务往一个线程池里灌,由于线程池大小终究和Runtime.getRuntime().availableProcessors()在一个数量级,这样做的并发度就很差;要么自己实现非阻塞的任务,使得任务不会阻塞线程,这样就要手写一大堆在java中并不好写的异步代码,或者使用异步的库/框架(NIO、netty)。Project Loom希望Fiber作为轻量级的thread实现,可以让任务的并发度不再受限于OS kernel threads,同时提供优雅些的API。与Thread不同,一个JVM可以支持百万级的Fiber数。顺便一提在Erlang 和 Go等语言中已经原生支持了这样的轻量级线程实现(实现方式分别是process和goroutine)。

Part 2: Quasar

在Project Loom开发进度遥遥无期时,我们还有别的选择吗?您好,有的。 Quasar就是一个第三方的轻量级线程库:

Quasar is a library that provides high-performance lightweight threads, Go-like channels, Erlang-like actors, and other asynchronous programming tools for Java and Kotlin.

官方提供了一个Quasar Maven archetype,你可以通过它生成一个quasar应用原型。