2015-12-18 64 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