L'accesso a un file da più thread per la lettura di blocchi da 1 MB è banale, basta determinare la lunghezza del file e il numero di blocchi in anticipo. Accodare i blocchi e lasciarli elaborare in parallelo da un dato numero massimo di thread. Ogni thread quindi apre il file in modo non bloccante, fa cercare un file nella posizione di inizio del blocco desiderato e legge il blocco. Lo stesso thread quindi può anche eseguire l'elaborazione.
Solo la scrittura risultato dovrà avvenire in sequenza (presumo non si può determinare facilmente la posizione file di output per un pezzo compresso prima dell'elaborazione precedente del blocco precedente non è stata completata): ogni volta che un filo è pronto con il suo pezzo, esso aspetta che il chunk precedente sia completato e scritto su disco, quindi il thread corrente può scrivere anche il chunk compresso (e rilasciare il mem usato).
Tuttavia, dovrai verificare quanti thread paralleli raggiungerai le massime prestazioni, questo dipende totalmente dal tuo sistema, dal tipo di dispositivo di archiviazione, dalla velocità del canale I / O, dalle CPU e dal numero di core, file system della velocità di memoria coinvolti e alcuni altri fattori.
Se sei sfortunato, potrebbe risultare che il numero ottimale di thread è solo uno , e altri possono rallentare il processo. Potrebbe essere più alto, o corso (guardare in questo vecchio Dr. Dobbs articolo , dove filettatura a più la lettura su un singolo file era ottimale per 2-4 thread, a seconda dell'hardware utilizzato). Ma l'unico modo affidabile per scoprirlo è fare alcuni test e misurarli da soli.