Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nio和编写非阻塞Scala代码_Scala_Scalability_Nio_Nonblocking - Fatal编程技术网

nio和编写非阻塞Scala代码

nio和编写非阻塞Scala代码,scala,scalability,nio,nonblocking,Scala,Scalability,Nio,Nonblocking,仅仅因为使用了java.nio,下面这样的代码中会不会有任何不阻塞的东西可以写入文件 def writeOutputFile(fileText: String, outDir: String, fileName: String) { import java.nio.file.{Path, Paths, Files} import java.nio.charset.StandardCharsets Files.write(Paths.get(outDir + "/" + fileN

仅仅因为使用了java.nio,下面这样的代码中会不会有任何不阻塞的东西可以写入文件

def writeOutputFile(fileText: String, outDir: String, fileName: String) { 
  import java.nio.file.{Path, Paths, Files}
  import java.nio.charset.StandardCharsets

  Files.write(Paths.get(outDir + "/" + fileName), fileText.getBytes(StandardCharsets.UTF_8))
}
或者,为了编写一个没有阻塞的文件,您是否需要用承诺和未来来包装这段代码?如果这样包装,会不会产生另一个线程,在这个
过程中阻塞。write


谢谢

java.nio本身的优点并不提供任何非阻塞好处。标准的
FileChannel
仍然是一个阻塞API。为了访问它的非阻塞功能,您必须使用
AsynchronousFileChannel

注意:小心不要将提供java
Future
的读/写方法误认为是一个有用的异步抽象,因为使用该
Future
时,您仍然必须阻塞才能收到完成通知。如果您有一堆等待的java
Future
实例,那么它只比同步I/O更好


对于真正的异步I/O API,您应该使用scala Future包装接受
CompletionHandler
的读/写方法,以便异步地通知您I/O完成。(请参见示例)

据我所知,它仍然会阻止函数的调用者。如果您希望它是异步的,您需要在将来包装它,或者使用AsynchronousFileChannel接口。您可以对它进行设置,使它不会阻塞,但您可能无法确保它终止,或者无法捕获错误,除非您像Lionel所说在将来包装它,并且等待或等待未来的实现。虽然如此,但是,那么,在这个场景中,nio本身的异步是什么呢?它在文件
.write
中做了java.io不做的事情吗?