akka流中异步文件IO的当前状态是什么?

时间:2017-08-18 12:58:32

标签: scala file-io akka nio akka-stream

:定位:

我希望看到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

问题:

  1. akka流文件IO的当前状态是如何异步的?
  2. akka流文件IO是否使用Java的NIO中的'AsynchronousFileChannel'?
  3. 我是否必须做一些事情来使用Java的NIO中的'AsynchronousFileChannel'?

1 个答案:

答案 0 :(得分:1)

  
      
  1. akka流文件IO的当前状态是异步的吗?
  2.   

仔细阅读source code表明Akka Stream的FileIO使用java.nio.ByteBufferjava.nio.channels.FileChannel。正如documentation所述,文件IO操作在专用调度程序上独立运行。

有一个开放的pull request尝试使用AsynchronousFileChannel。根据该PR报告的基准测试结果,PR可能会关闭,有利于尝试使用另一个PR捕获的同步NIO的新方法。

  
      
  1. akka流文件IO是否使用Java的NIO中的'AsynchronousFileChannel'?
  2.   

没有

  
      
  1. 我是否必须做一些事情来使用Java的NIO中的'AsynchronousFileChannel'?
  2.   

这个问题没有实际意义,因为Akka Streams不使用AsynchronousFileChannel