@
byte10 我最近在一个使用 Kotlin 语言的小项目中,分别用 springboot 和 vert.x 做 API 服务,各自进行 nativeCompile 编译 binary ,两者在 native 后差距不大,vert.x 稍胜一筹,内存占用比 Go 还是高一些,编译时间就要比 Go 高一个数量级了。
springboot 有了虚拟线程之后,vert.x 的性能优势还在,但没有 multithreading vs reactive 这种架构带来的降维打击式的巨大差距了。
vert.x + kotlin coroutine ,开发心智负担也很小,尤其是有了虚拟线程之后,可以在 coroutine 中调用阻塞函数(withTimeout 类方法在阻塞时无法工作),只借用 kotlin 的 coroutien 的结构化并发管理,不再需要 executeBlocking 缝合了。如果完全不用 coroutine ,直接.await()也变得可用了,比以前借助 quasar 实现的同步编码方式好太多了。
vert.x 目前(5.1 为止)还有多个涉及虚拟线程的 issue ,可能还需要一年左右才能成熟无问题。quarkus 我也试过,感觉就是个 vertxboot ,用户基数有点小,vert.x 5.0 发布一年多了,quarkus 还没完成 5.0 的适配,迁移工作量还不小,可能 2027 才发布,2027 年末甚至 2028 才可用。
https://github.com/quarkusio/quarkus/issues/51959JVM 可能要等 valhalla 成熟后,内存占用才能再提升一档,估计快了,2030 年之前吧。native aot 这块儿,dotnet 其实做的很不错,编译速度要快的多,内存占用也低的多,性能和打包后的 binary 体积也能跟 Go 比一比。