0

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

 2 years ago
source link: https://www.jdon.com/60469
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

对于大多数语言来说,这意味着添加某种形式的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/目录添加到你的路径中。

详细点击标题


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK