我想异步读取/写入原始设备(在 Linux 中只是一个文件),我一直在使用 java.nio.channels.AsynchronousFileChannel
。
但它是一个“伪异步”,因为 AsynchronousFileChannel 使用线程池来执行读/写任务。它实际上是在调用操作系统提供的同步读写接口(interface)。
我真正想要的是一个真正的异步实现,它是 linux 中的 io_submit
。
但我无法在 jdk 或任何其他存储库(如 guava 或 apache)中找到它。
所以我的问题是:
在 java 中,是否存在基于 native
io_submit
接口(interface)的异步文件访问器的现有实现?如果没有,为什么我看不到其他需要它的人?
最佳答案
In java, is there an existing implementation of asynchronous file accessor based on the native io_submit interface
在撰写本文时(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 捆绑在一起或以其他方式重新实现它。
If not, why can't I see anyone else who need it ?
急需它的人重新创建了包装器(例如参见 https://github.com/zrlio/jaio )。然而,支持 KAIO 将仅限于 Linux,因此不那么可移植(这有点违背 Java 的关键精神)。
关于java - java中有真正的异步文件访问器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50126036/