由于我个人平日在服务端几乎只写异步的 workflow (就是一个 request 进来,各种处理,然后一个 response 回去。用 reactor-core 那套),写异步代码就跟其他人写同步代码一样,没什么特别感觉。
只是偶尔会在网上看人讨论 reactor 或 Java 其他异步框架的时候,总有一些人会吐槽“巨难写,没人接手”。
但更诡异的是:总所周知,Java 面试很擅长问造火箭问题,各种 GC 日志分析、JVM 性能调优,不准备个高并发面试必备套餐都不好意思去面试(滑稽的是大多数项目还用着 BIO 模型)。这表明大伙至少心里还是渴望追求高性能的(不然面个锤子)。
而实际上,各种调优带来的效果微乎其微(通常就保持默认配置,改一些常规参数),升级个版本号比很多“专家”瞎折腾好多了。反倒是 reactor-netty 那套异步模型,配合 R2DBC/MongoDB 或诸如此类的以 reactor-netty 为客户端驱动的整个应用架构,能带来吞吐量质的飞跃。
造成了一个滑稽局面就是:每个人都在研究如何在 shi 上雕花更美,却不肯直接展示花。
而且相比网上的一些言论,聊起 c++默认模式就是:各种高级+复杂+刁钻特性,如数家珍。但是看 Java 一说异步框架,一堆人“巨难写,没人接手”劝退的。虽然知道 c++/java 圈子不一样,但我不相信大家对“难”的理解,有这么大的差距。
如果在大家真心追求高性能的前提下,reactor-core/netty 那套东西真得难学吗?
PS:
1. 异步框架的 debug 确实麻烦
2. Spring WebFlux 包的就是 reactor-netty
只是偶尔会在网上看人讨论 reactor 或 Java 其他异步框架的时候,总有一些人会吐槽“巨难写,没人接手”。
但更诡异的是:总所周知,Java 面试很擅长问造火箭问题,各种 GC 日志分析、JVM 性能调优,不准备个高并发面试必备套餐都不好意思去面试(滑稽的是大多数项目还用着 BIO 模型)。这表明大伙至少心里还是渴望追求高性能的(不然面个锤子)。
而实际上,各种调优带来的效果微乎其微(通常就保持默认配置,改一些常规参数),升级个版本号比很多“专家”瞎折腾好多了。反倒是 reactor-netty 那套异步模型,配合 R2DBC/MongoDB 或诸如此类的以 reactor-netty 为客户端驱动的整个应用架构,能带来吞吐量质的飞跃。
造成了一个滑稽局面就是:每个人都在研究如何在 shi 上雕花更美,却不肯直接展示花。
而且相比网上的一些言论,聊起 c++默认模式就是:各种高级+复杂+刁钻特性,如数家珍。但是看 Java 一说异步框架,一堆人“巨难写,没人接手”劝退的。虽然知道 c++/java 圈子不一样,但我不相信大家对“难”的理解,有这么大的差距。
如果在大家真心追求高性能的前提下,reactor-core/netty 那套东西真得难学吗?
PS:
1. 异步框架的 debug 确实麻烦
2. Spring WebFlux 包的就是 reactor-netty