2015-12-18 65 views
5

我可以創建一個單獨的線程來充當I/O隊列,但我不確定這是否是最好的方法。它看起來是最好的。如何異步讀取文件?

我不知道如何使用mio加載本地文件。

+4

你找不到如何用mio異步讀取文件的原因是因爲它明確列爲該項目的非目標。^_^ – Shepmaster

+4

對於Rust而言,無法講得太多,但從操作系統的角度來看(對絕大多數(如果不是全部的話)主流系統來說也是如此)創建線程是迄今爲止最好的解決方案。異步I/O在所有主流操作系統上都執行得很差,無用或者根本不工作(不管他們做了什麼聲明)。 – Damon

+0

你可以用'MADV_WILLNEED'試試'madvise'。在Rust中它會放在'libc'文件夾中(https://crates.io/crates/libc/; http://rust-lang-nursery.github.io/libc/x86_64-unknown-linux-gnu/的libc/fn.madvise.html)。 – ArtemGr

回答

1

我會建議你簡單地脫掉另一個線程。 io不打算這樣做,並且讓自己的異步加載器可以完全控制讀/寫的發生時間和方式,如果性能是您的目標(如我所想象的那樣,如果您需要異步磁盤I/O)。您可以選擇是寫/讀單字節,單行還是累加塊並寫入。例如,如果應用程序在其他時間等待其他時間,例如網絡,則可以選擇寫入磁盤。

+1

你能否引用一些來自標準庫的** io **,不打算支持這一點? – Shepmaster