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