这波 jdk21 的更新,会不会引发 go 系统重构成 Java 的 kpi 需求

2023-09-21 11:45:35 +08:00
 assiadamo

来自一个老 javaer 的妄想 正经的: 有没有 java virtual thread 与 goroutine 的性能比较?

7719 次点击
所在节点    程序员
55 条回复
darkengine
2023-09-21 11:56:32 +08:00
jdk8 的都不愿意升级到 21 ,为啥 go 要重构到 jdk21 🙄
Breacher
2023-09-21 12:32:02 +08:00
我觉得并不会,Java 与 Go 之间的不同不仅仅在 Java 是否有一个跟 Go 的 goroutine 相对等的 java virtual thread 。它们在语法,学习曲线,依赖管理,工程化,实施部署,向后兼容性,生态,云原生支持等各方面都存在巨大差异。
DefoliationM
2023-09-21 12:33:55 +08:00
没可能,一个 jvm 就劝退了。
liuguang
2023-09-21 12:35:39 +08:00
就 java 那内存占用,谁会抛弃轻量级的选老古董。
me1onsoda
2023-09-21 12:37:36 +08:00
等 Java8 boy 升级再说😁
dc2002007
2023-09-21 12:59:13 +08:00
你的脑回路很清奇
coer
2023-09-21 13:00:04 +08:00
有个疑问,就一个 virtual thread 不行吧,java 里面很多库的 io 会阻塞线程,不就把虚拟线程阻塞了?
ixiaohei
2023-09-21 13:03:06 +08:00
@coer 这个 jdk 为了支持虚拟线程把以前阻塞 api 的都兼容虚拟线程了,现在会挂起虚拟线程,而不会阻塞系统线程了。不过我估计有些使用 native 操作系统调用的就不行了。
BBCCBB
2023-09-21 13:03:35 +08:00
@coer socket 这些支持虚拟线程. 阻塞的时候就切走了, 等待唤醒. 都是阻塞的话 virtual thread 和线程就没区别了..
kuituosi
2023-09-21 13:10:39 +08:00
主要是 native 那个会跟 go 竞争,而不是协程。而且 JAVA 的当前目标就是云原生
mightybruce
2023-09-21 13:16:32 +08:00
go 又不是靠业务发展的,靠的是中间件和云原生。java 再怎么样,在云原生中也是靠边站的角色。只有少数云原生中间件会选用 java, 云原生大多数组件也不是一种语言,go/rust/c++ 三种都有。
drvDPqg5nO7kZWhv
2023-09-21 13:17:04 +08:00
.NET 平台是目前为止唯一一个同时实现了 Green Thread 和 async/await 异步模型的平台,其 Green Thread 异步模型目前性能比 async/await 模型低一点,同时在与某些特定特性如线程局部静态变量和本机线程状态交互时存在功能上的问题,thread local 变量的支持以及暴露 native thread 状态变得非常难以实现。
https://github.com/dotnet/runtimelab/issues/2398
mightybruce
2023-09-21 13:19:05 +08:00
goroutine 不需要任何包,是直接嵌入 go 的,绝大多数性能比较的测试都是没有意义的。javaer 还是做你的 crud 还有业务吧,别来搞基础设施。
0m9ionbP8wuvs8S3
2023-09-21 13:20:08 +08:00
不太可能,goroutine 已经和 go 语言深度绑定了. java 的 virtual thread 是新增的特性,而且在运行 synchronized 代码块上还有阻塞的问题,很多库和框架还要做适配
mightybruce
2023-09-21 13:20:51 +08:00
goroutine 不是 coroutine 协程,GMP 调度 是多个线程对应多个协程的抢占式调度。async/await 是偏向 IO 的协程。
liprais
2023-09-21 13:23:25 +08:00
一说 java
.net 神教闻着味就来了
helone
2023-09-21 13:26:15 +08:00
要按你这个说法 .NET 早就🔥到天上去了
drvDPqg5nO7kZWhv
2023-09-21 13:31:03 +08:00
是很多 javaer 不懂异步,所以连 21 都不敢用,更别提 async await
assiadamo
2023-09-21 13:37:55 +08:00
@mightybruce 想起几年前面试 go 的时候,面试官还跟我争论过抢占式调度还是协作式调度,当时的 go 版本已经是抢占式了,他们也是老版本的不升级
mmdsun
2023-09-21 13:40:17 +08:00
@coer 搜索了一下,为实现 virtual thread ,JDK 确实重写了大量代码包括 java.iojava.net 、java.nio.channels 等包。

https://www.infoq.com/news/2023/04/virtual-threads-arrives-jdk21/

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

https://www.v2ex.com/t/975825

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

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

© 2021 V2EX