支持虚拟线程的 TCP 服务框架?

171 天前
 tairan2006

Java 21 发布一年了,http 、websocket 、grpc 对虚拟线程支持的框架都有了。但是 netty 官方明确表示为了兼容 java11 ,不会支持虚拟线程( https://github.com/netty/netty/issues/12816 )。

所以现在想用虚拟线程写个 tcp 服务,只能用 jdk 自带的库了么?有没有好写一点的框架。

2336 次点击
所在节点    Java
9 条回复
codingmiao
171 天前
虽然 netty 不会去全盘的换虚拟线程,但是 EventLoopGroup 可以自定义一个 ThreadFactory 在里面起虚拟线程,然后 channelRead0 里面如果有耗时操作也起一个虚拟线程去搞就行了,我是这么干的:
https://github.com/codingmiao/hppt/blob/main/run/src/main/java/org/wowtools/hppt/common/util/NettyObjectBuilder.java

然后我觉得虚拟线程整个体系还在起步阶段,比如 WebFlux 对比虚拟线程加持的 springboot 还是有一点点性能优势的,虚拟线程对比现有的响应式写法最大的优势是在性能没有拉下太多的前提下大幅降低了开发难度。jdk 官方也说了会逐步干掉响应式编程,或许到下一个 LTS 版本,netty 看环境成熟了也会走虚拟线程的。
chandlerbing9317
171 天前
建议 netty 的提供的 eventLoop 线程只做 cpu 操作,如编解码,指令匹配等,一些业务操作还是要放在自定义线程池中,不要阻塞 eventloop 线程,而自定义的业务线程池可以使用虚拟线程。
sujin190
171 天前
netty 支持虚拟线程有啥实际意义,虚拟线程协程之类的最大意义本来就是在用同步语法写异步逻辑,netty 就不可能再改回来变成同步语法否则也就不是 netty 了,还不说虚拟线程在线程上又多了一层调度器除了白白损失性能对 netty 意义不大吧,netty 的 Handler 本来就不应该有同步 io 操作,否则用 netty 这麻烦的说不是对此一举,有需要同步 io 操作本来就应该放到独立 executor 中去,这独立 executor 完全就可以是虚拟线程的啊
mmdsun
171 天前
@codingmiao 请问 JDK 官方逐步干掉响应式编程的说法有处出来源吗?
BBCCBB
171 天前
eventloop 性能始终比有栈协程来的高, 只是 eventloop 相比协程来说写起来更麻烦, 以及有 callback..
yazinnnn0
171 天前
tairan2006
171 天前
@codingmiao 所以,推荐 boss group 还是用系统线程,worker group 改成虚拟线程池?
8675bc86
170 天前
看到虚拟线程进来的,JAVA 就是会造词汇,coroutine 对吧。
tairan2006
170 天前
@8675bc86 是的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1092963

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX