Se un semplice mutex sull'intero file sta per darvi un collo di bottiglia, e RandomAccessFile
non è thread-safe senza un mutex, allora avete bisogno di cercare alternative per RandomAccessFile
.
Un'alternativa consiste nel mappare il file in memoria come MappedBuffer
e utilizzare le sezioni del buffer per consentire a diversi thread di accedere al file senza interferire l'uno con l'altro. Un singolo scrittore/blocco di più lettori alla granularità dell'intero sarebbe facile da implementare. Si potrebbe anche andare oltre e implementare la lettura e la scrittura simultanee di sezioni non sovrapposte del file, ma sarebbe più complicato.
Non sarei sorpreso di sentire che qualcuno, da qualche parte, lo ha già implementato come libreria riutilizzabile.
fonte
2010-05-21 14:08:40
Dipende da come si legge e si scrive dal file, ma le primitive di sincronizzazione da java.util.concurrent si comportano molto bene con la JVM moderna. –
Capisco se si sta tentando di utilizzare lo stesso RandomAccessFile da thread diversi, ma è davvero necessario eseguire più letture contemporaneamente? Non sono un esperto ma nella maggior parte dei casi l'hardware non sarà in grado di servire più letture contemporaneamente (non so per gli array di dischi high-end). –
Funzionerà con gli array RAID. Inoltre: quando i dati provengono dalla cache, possono essere recuperati in parallelo. –