Rust 如何异步读取文件?

Rust 如何异步读取文件?,rust,Rust,我可以创建一个单独的线程作为I/O队列,但我不确定这是否是最好的方法。看起来是最好的 我不知道如何使用加载本地文件。我建议您只需自行旋转另一个线程即可io不打算这样做,而制作自己的异步加载程序可以让您完全控制读取/写入的方式和时间,如果性能是您的目标,这一点很重要(我可以想象,如果您需要异步磁盘I/O,这一点很重要)。您可以选择是写入/读取单个字节、单行,还是累积块并写入它们。如果您的应用程序在其他时间等待其他东西,例如网络,您可以选择写入磁盘。使用tokio::fs::read: use to

我可以创建一个单独的线程作为I/O队列,但我不确定这是否是最好的方法。看起来是最好的


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

我建议您只需自行旋转另一个线程即可
io
不打算这样做,而制作自己的异步加载程序可以让您完全控制读取/写入的方式和时间,如果性能是您的目标,这一点很重要(我可以想象,如果您需要异步磁盘I/O,这一点很重要)。您可以选择是写入/读取单个字节、单行,还是累积块并写入它们。如果您的应用程序在其他时间等待其他东西,例如网络,您可以选择写入磁盘。

使用tokio::fs::read:

use tokio::prelude::Future;

fn main() {
    let task = tokio::fs::read("/proc/cpuinfo").map(|data| {
        // do something with the contents of the file ...
        println!("contains {} bytes", data.len());
        println!("{:?}", String::from_utf8(data));
    }).map_err(|e| {
        // handle errors
        eprintln!("IO error: {:?}", e);
    });
    tokio::run(task);
}

您无法找到如何使用mio异步读取文件的原因是,它被明确列为该项目的非目标^_^关于锈病,我们不能说太多,但从操作系统的角度来看(对于绝大多数(如果不是全部的话)主流系统来说,创建线程是迄今为止最好的解决方案。异步I/O要么实现得很差,没有用,要么在所有主流操作系统上都无法工作(不管它们声称什么)。您可以使用
madvise
尝试
MADV\u WILLNEED
。在Rust中,它将位于
libc
板条箱(;)中。您能否引用一些来源,表明标准库中的io不打算支持此功能?