3
所以在Scala中,当我使用java FILESTREAM LIB,如:使用FileStream来读取文件,它会被阻止?
inStream = Option(new FileInputStream(file))
..
in.read(imageData)
Some(imageData)
这会导致阻塞操作?换句话说,这是否应该包装在未来以使其异步?
谢谢,
所以在Scala中,当我使用java FILESTREAM LIB,如:使用FileStream来读取文件,它会被阻止?
inStream = Option(new FileInputStream(file))
..
in.read(imageData)
Some(imageData)
这会导致阻塞操作?换句话说,这是否应该包装在未来以使其异步?
谢谢,
这是一个阻塞操作。
在Future
包装纸不会使文件异步操作,但它将从Future
执行服务/线程池阻碍线程...
附录
所有JVM中的执行发生在线程上。当使用Future
时,封装计算发生的线程与启动Future
的线程不同。当您使用旧的java.io
时,操作被阻止,无论您是直接呼叫它们还是将它们交给Future
。
如果意图创建高并发系统,则根本不会执行阻塞操作。使用Future
和actors可以实现高并发性,而不会产生线程每个I/O操作的高开销,但前提是只有I/O操作本身是非阻塞的。
Randall是对的。我们有一个课程将这个事实抽象出来,所以我忘记了这一点。我删除了我的答案,因为它不正确。在未来简单包装不会使其异步,你需要特殊的逻辑。 – coltfred 2013-03-25 16:29:03
感谢您的快速回答,我不清楚它是什么意思,“但它会绑定来自Future执行者服务/线程池的线程......”你能解释一下吗? – user776635 2013-03-25 16:41:52
也,这是行不通的,在scala中做异步文件io操作的正确方法是什么? – user776635 2013-03-25 16:45:45