:定位:
我希望看到Akka的文件IO尽可能是异步和非阻塞的。
到目前为止我的知识状况:
在older project documentation中,您可以阅读:
请注意
由于当前版本的Akka(2.3.x)需要支持JDK6,所以 目前提供的文件IO实现无法使用 异步文件IO操作,因为它们是在JDK7中引入的(和 更新)。一旦Akka可以自由地要求JDK8(来自2.4.x)这些 将更新实现以使用新的NIO API(即 AsynchronousFileChannel)。
目前的akka版本是'2.5.4'。当前版本的akka-stream是'2.11'或'2.12'。在current documentation中,abhove中的注释丢失了,只是明确提到文件IO意味着阻塞操作,这些操作由专用于IO操作的调度程序处理。
在akka-streams Jar-File内的'MANIFEST.MF'文件中有一行:
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
所以我猜它需要Java 8。
有a question与scala异步文件IO相关但从2015年1月开始。One of the answers包含:
Akka IO虽然没有在其核心提供文件IO,但却有一个模块 由Dario Rexin开发,允许使用AsynchronousFileChannel 与Akka IO以非常简单的方式。看看这个库 使用它:https://github.com/drexin/akka-io-file
问题:
答案 0 :(得分:1)
- akka流文件IO的当前状态是异步的吗?
醇>
仔细阅读source code表明Akka Stream的FileIO使用java.nio.ByteBuffer
和java.nio.channels.FileChannel
。正如documentation所述,文件IO操作在专用调度程序上独立运行。
有一个开放的pull request尝试使用AsynchronousFileChannel
。根据该PR报告的基准测试结果,PR可能会关闭,有利于尝试使用另一个PR捕获的同步NIO的新方法。
- akka流文件IO是否使用Java的NIO中的'AsynchronousFileChannel'?
醇>
没有
- 我是否必须做一些事情来使用Java的NIO中的'AsynchronousFileChannel'?
醇>
这个问题没有实际意义,因为Akka Streams不使用AsynchronousFileChannel
。