用Java 19实现类似Go并发 - mccue


线程通常很昂贵:
操作系统没有办法准确知道一个线程需要多少堆栈空间,所以它分配的数量大约是一兆字节。

解决这个问题的方法是实现一种机制,即利用有限数量的操作系统线程,并在其之上处理大量的 "逻辑线程"。

对于大多数语言来说,这意味着添加某种形式的async/await语法:
你在代码里放一个await,语言就知道它可以切换到处理另一个任务。
你只能在标记为async的代码中放置await。
这会带来其他问题。

Go编程语言与大多数语言不同,它是以 "非合作 "的方式实现这种杂耍的。
你不用明确地用async和await标记你的代码,运行时为你自动切分。
他们把这些廉价的线程称为 "goroutines"。

Java虚拟机将获得一个类似的功能,叫做 "虚拟线程"。
这不仅仅有利于Java,还有利于JVM上的每一种语言,包括Clojure、Groovy、Kotlin和Scala。

虚拟线程预计将于2022年9月20日作为 "预览 "功能出现在Java 19中。这意味着底层功能的实现已经完成并经过了测试,但公共API会有一些突破性的变化,必须明确选择进入。

Go中许多围绕并发性的模式都来自于你可以随意创建线程的设想。
由于Java即将加入这个俱乐部,现在似乎是一个很好的时机,可以通过Go的一些并发性例子,看看它们翻译过来会是什么样子。

如果你想跟着学,你可以在这里here得到一个早期访问构建。解压缩文件并将bin/目录添加到你的路径中。

详细点击标题