基于 Java 传统命令式(Imperative)技术栈实现的 Web 服务曾经风光一时,在业界广泛使用,即使是现在,仍然有不少的服务跑在这样的模式下面。但反观其性能,现已被各种基于非阻塞 I/O 的并发编程模式所超越,例如最有代表性的:nodejs 的响应式编程(reactive programming)和 golang 的轻量级协程(goroutines)。而且由于 Java 服务需要运行在 JVM 之上,其内存消耗与其他语言的往往不在一个数量级,从笔者实现使用情况来看一般要超出 10 倍以上。虽然 Java 生态中很早就引入了 Netty 这样优秀的非阻塞 I/O 框架,但由于其学习转换成本相对较高,一般的 Web 服务很少直接采用。当下 JVM 生态里兴起的一些基于非阻塞 I/O 的 Reactive 编程框架和 GraalVM 的 Native Image 技术让这一局面有了大大的改善。这其中较新的 Quarkus 框架结合 GraalVM 的组合是一个不错的选择。不同于传统 Spring 的解决方案,Quarkus 在框架层面融合了 Imperative 和 Reactive 两种编程模式,让它们都运行在 Netty 的非阻塞网络库之上。再加上其构建之初就将与 GraalVM 的结合设为主要目标,所以两者可以几乎无缝的使用。从实际项目使用情况来看,其性能和内存消耗已经和以上提到的其他主流语言和模型不相上下,有时甚至要更好。