所以在 Scala 中,当我使用 java 文件流库时,如:
inStream = Option(new FileInputStream(file))
..
in.read(imageData)
Some(imageData)
这会导致阻塞操作吗?换句话说,是否应该将其包装在 Future 中以使其异步?
谢谢,
所以在 Scala 中,当我使用 java 文件流库时,如:
inStream = Option(new FileInputStream(file))
..
in.read(imageData)
Some(imageData)
这会导致阻塞操作吗?换句话说,是否应该将其包装在 Future 中以使其异步?
谢谢,
这是一个阻塞操作。
将它包装在 aFuture
不会使文件操作异步,但它会占用Future
执行器服务/线程池中的一个线程......
附录
JVM 中的所有执行都发生在一个线程上。当一个人使用一个Future
线程时,发生封装计算的线程与启动该线程的线程不同Future
。当您使用旧java.io
的操作时,无论您是直接调用它们还是将它们交给Future
.
如果打算创建高并发系统,则根本不进行阻塞操作。使用Future
and 参与者可以让您实现高并发,而不会产生每个线程的 I/O 操作的高开销,但前提是 I/O 操作本身是非阻塞的。