JFR 支持异步 I/O 吗?
我正在使用 Java Flight Recorder(在 HotSpot 1.8.0_144 上)+ Mission Control 来分析应用程序。
在File IO任务控制的选项卡上,我看到的“活动”比我预期的要少几个数量级,而且我知道这些活动实际上正在发生。
我实际看到的 IO“活动”似乎对应于同步文件 IO,但我不确定这是否只是巧合,或者是我的 JFR 配置错误。
我确实在一个较小的示例上尝试过此操作(见下文),感觉好像没有报告文件异步事件。
val inputStream = new FileInputStream("/home/cmhteixeira/Desktop/output.txt")
val outputStream = new FileOutputStream("/home/cmhteixeira/Desktop/output-copy.txt")
inputStream.transferTo(outputStream)
Run Code Online (Sandbox Code Playgroud)
RxIo(下面使用)是一个声称使用文件异步 IO 的库。
import org.javaync.io.AsyncFiles
import java.nio.file.Paths
val inputStream = Paths.get("/home/cmhteixeira/Desktop/output.txt")
val outputStream = Paths.get("/home/cmhteixeira/Desktop/output-copy.txt")
AsyncFiles
.readAllBytes(inputStream)
.thenCompose(bytes => AsyncFiles.writeBytes(outputStream, bytes))
.thenAcceptAsync(index => println("done")/* invoked on completion */)
Run Code Online (Sandbox Code Playgroud)
在上述两种情况下,当通过 Java Mission Control 吃午餐时File IO Threshold被设置为0 ns。
不支持文件异步IO吗?
没有文件异步 I/O 事件。
异步套接字 IO 怎么样(我没有测试过)?
也不是插座。
如果答案是否定的,那么使用 JFR 的社区认为这有多糟糕?这感觉像是一个很大的缺点,但我缺乏背景来理解这在实践中是否很重要。
多年来,这是一个众所周知的问题,但实施起来却很棘手。JFR 确实支持虚拟线程,这有望减少直接使用异步 API 的需要。它仍然是预览功能(2022 年 4 月)
请参阅 FOSDEM 的演示文稿,33:00 分钟。 https://archive.fosdem.org/2020/schedule/event/state_openjdk/
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |