所以在Scala中,当我使用java文件流lib时:
inStream = Option(new FileInputStream(file))
..
in.read(imageData)
Some(imageData)
会导致阻塞操作吗?换句话说,它应该包含在Future中以使其异步吗?
谢谢,
答案 0 :(得分:4)
这是阻止操作。
将其包装在Future
中不会使文件操作异步,但将绑定来自Future
执行程序服务/线程池的线程。 ..
<强>附录强>
JVM中的所有执行都发生在一个线程上。当使用Future
时,发生封装计算的线程与发起Future
的线程不同。当您使用旧的java.io
时,操作会被阻止,无论您是直接调用还是将其移至Future
。
如果打算创建高并发系统,则根本不进行阻塞操作。使用Future
和actors允许您实现高并发性,而不会产生每个I / O操作的高开销,但前提是I / O操作本身是非阻塞的。