JFR是否支持异步I/O?
我正在使用Java飞行记录器(在HotSpot 1.8.0_144上)+使命Control来评测应用程序。
在使命Control的File IO
选项卡上,我看到的“活动”比我预期的要少几个数量级,而且我知道这是实际发生的。
我实际看到的IO“活动”似乎对应于同步文件IO,但我不确定这是否只是巧合,或者是我的JFR配置错误。
我确实在一个较小的示例(见下文)中尝试了此方法,感觉文件异步事件没有被报告。
报告同步文件IO事件
val inputStream = new FileInputStream("/home/cmhteixeira/Desktop/output.txt")
val outputStream = new FileOutputStream("/home/cmhteixeira/Desktop/output-copy.txt")
inputStream.transferTo(outputStream)
未报告异步文件IO事件
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 */)
在上述两种情况下,当通过Java使命Control执行午餐时,File IO Threshold
被设置为0 ns
。
个问题
- 是否不支持文件异步IO?
- 异步套接字IO(我还没有测试过)呢?
- 如果答案是否定的,那么使用JFR的社区认为这有多糟糕?
- 这感觉像是一个很大的缺点,但我缺乏上下文来理解在实践中这是否很重要。
1条答案
按热度按时间mqkwyuun1#
是否不支持文件异步IO?
没有文件异步I/O事件。
异步套接字IO(我还没有测试过)呢?
也不是插座。
如果答案是否定的,使用JFR的社区认为这有多糟糕?感觉这是一个很大的缺点,但我缺乏上下文来理解这在实践中是否很重要。
它是known issue已经很多年了,但是实现起来很棘手,JFR确实支持Virtual Threads,这有望减少直接使用异步API的需求,它仍然是一个预览功能(2022年4月)
请观看FOSDEM的演示文稿,33:00分钟,. https://archive.fosdem.org/2020/schedule/event/state_openjdk/