2015-12-18 18 views
5

Potrei creare un thread separato per fungere da coda I/O, ma non sono sicuro se questo sia il modo migliore. Sembra il miglioreCome leggere un file in modo asincrono?

Non so come caricare un file locale con mio.

+4

Il motivo per cui non è possibile trovare la modalità di lettura asincrona di un file con mio è perché è esplicitamente elencato come non obiettivo per quel progetto.^_^ – Shepmaster

+4

Non posso dire molto su Rust, ma dal punto di vista del sistema operativo (questo è vero per la stragrande maggioranza, se non tutti, i sistemi mainstream) la creazione di un thread è di gran lunga la soluzione migliore. L'I/O asincrono è implementato male, inutile o non funziona affatto su tutti i sistemi operativi tradizionali (indipendentemente da quanto affermano). – Damon

+0

Si potrebbe provare 'madvise' con' MADV_WILLNEED'. In Rust sarà nella cassa 'libc' (https://crates.io/crates/libc/; http://rust-lang-nursery.github.io/libc/x86_64-unknown-linux-gnu/ libc/fn.madvise.html). – ArtemGr

risposta

1

Suggerirei semplicemente di staccare un altro filo da soli. io non ha intenzione di fare questo, e fare il proprio caricatore asincrono consente di avere il controllo completo su come e quando le letture/scritture avvengono, il che è importante se la prestazione è il tuo obiettivo (come immagino sia, se hai bisogno di un disco asincrono I/O). Puoi scegliere se scrivere/leggere singoli byte, linee singole o accumulare blocchi e scriverli. Se l'applicazione è in attesa su qualcos'altro in altri momenti, come la rete, è possibile scegliere di scrivere su disco, ad esempio.

+1

Puoi citare alcune fonti che suggeriscono che ** io ** dalla libreria standard, non ha intenzione di supportare questo? – Shepmaster

Problemi correlati