linux java中有真正的异步文件存取器吗?
我想异步读/写一个原始设备(在linux中只是一个文件),我一直在使用java.nio.channels.AsynchronousFileChannel
但这是一个“假异步”,因为AsynchronousFileChannel使用线程池来执行读/写任务。它实际上是在调用操作系统提供的同步读/写接口
我真正想要的是一个真正的异步实现,它在linux中是io_submit
但我在jdk或任何其他存储库(如guava或apache)中都找不到它
所以我的问题是:
在java中,是否存在基于本机
io_submit
接口的异步文件访问器的现有实现如果没有,为什么我看不到其他需要它的人
# 1 楼答案
在撰写本文时(2019年),默认Java库中没有。我怀疑在默认库中实现
io_submit()
Java包装器的热情有多高,因为:libaio
/KAIO很古怪。Linux的KAIO充满了限制,比如在进行直接I/O(甚至是超出调用方控制的there are very elaborate rules which will turn submission synchronous if broken)时才真正实现异步libaio
库本身会存在,因此您必须将其与Java捆绑或以其他方式重新实现李>非常需要它的人已经重新创建了包装(例如,参见https://github.com/zrlio/jaio)。然而,支持KAIO将是Linux独有的东西,因此没有那么好的可移植性(这有点违背了Java的一个关键理念)