3

所以在 Scala 中,当我使用 java 文件流库时,如:

inStream = Option(new FileInputStream(file))
  ..
  in.read(imageData)
  Some(imageData)

这会导致阻塞操作吗?换句话说,是否应该将其包装在 Future 中以使其异步?

谢谢,

4

1 回答 1

4

这是一个阻塞操作。

将它包装在 aFuture不会使文件操作异步,但它占用Future执行器服务/线程池中的一个线程......

附录

JVM 中的所有执行都发生在一个线程上。当一个人使用一个Future线程时,发生封装计算的线程与启动该线程的线程不同Future。当您使用旧java.io的操作时,无论您是直接调用它们还是将它们交给Future.

如果打算创建高并发系统,则根本不进行阻塞操作。使用Futureand 参与者可以让您实现高并发,而不会产生每个线程的 I/O 操作的高开销,但前提是 I/O 操作本身是非阻塞的

于 2013-03-25T16:23:59.840 回答