java中有真正的异步文件访问器吗?

java中有真正的异步文件访问器吗?,java,linux,asynchronous,storage,Java,Linux,Asynchronous,Storage,我想异步读/写原始设备(在linux中只是一个文件),我一直在使用java.nio.channels.AsynchronousFileChannel 但这是一个“假异步”,因为AsynchronousFileChannel使用线程池来执行读/写任务。它实际上是在调用操作系统提供的同步读/写接口 我真正想要的是一个真正的异步实现,它是linux中的io\u submit 但我在jdk或任何其他存储库(如guava或apache)中都找不到它 所以我的问题是: 在java中,是否存在基于本机io\u

我想异步读/写原始设备(在linux中只是一个文件),我一直在使用
java.nio.channels.AsynchronousFileChannel

但这是一个“假异步”,因为AsynchronousFileChannel使用线程池来执行读/写任务。它实际上是在调用操作系统提供的同步读/写接口

我真正想要的是一个真正的异步实现,它是linux中的
io\u submit

但我在jdk或任何其他存储库(如guava或apache)中都找不到它

所以我的问题是:

  • 在java中,是否存在基于本机
    io\u submit
    接口的异步文件访问器的现有实现

  • 如果没有,为什么我看不到其他需要它的人

  • 在java中,是否存在基于本机io_submit接口的异步文件访问器的现有实现

    在撰写本文时(2019年),不在默认Java库中。我怀疑在默认库中实现
    io\u submit()
    Java包装器的热情有多高,因为:

    • libaio
      /KAIO很古怪。Linux的KAIO充满了限制,比如在执行直接I/O时,只有真正的异步(甚至超出了调用方的控制)
    • 不能保证
      libaio
      库本身会存在,所以您必须将其与Java捆绑或以其他方式重新实现它
    如果没有,为什么我看不到其他需要它的人


    非常需要它的人已经重新创建了包装(例如,请参阅)。然而,支持KAIO将是Linux独有的东西,因此没有那么好的可移植性(这有点违背了Java的一种重要精神)。

    这会不会违背Java的“平台独立”特性?rmlan,可能有一个异步实现,它在Linux上使用io_submit,在不支持该机制的平台上使用线程——它不必破坏平台独立性。为什么要这样做?这将允许您执行
    AsynchronousFileChannel
    不允许的操作?这里有一些讨论:@tgdavies,谢谢,我看到了这个讨论。但是,我希望这样做的原因是,如果我关闭文件系统缓存和磁盘缓冲区,线程的实现与io_submit相比无法提供良好的性能