Che tipo di file è questo? Perché hai bisogno di nutrirlo con più thread? Dipende dalle caratteristiche (non conosco una parola migliore) sull'utilizzo del file.
Trasferimento di un file da diversi luoghi sulla rete (a breve: Torrent-like)
Se si sta trasferendo un file esistente, il programma dovrebbe
- non appena, come si arriva conoscere la dimensione del file, creala con un contenuto vuoto: questo previene errori successivi fuori disco (se non c'è abbastanza spazio, verrà fuori alla creazione, prima di scaricarne qualcosa), inoltre aiuta le prestazioni;
- se si organizza bene il trasferimento (e perché no), ogni thread sarà responsabile di una parte distinta del file, quindi le scritture dei file saranno distinte,
- anche se in qualche modo due thread scelgono la stessa porzione del file, non causerà errori, perché scrivono gli stessi dati per le stesse posizioni dei file.
Aggiunta di blocchi di dati in un file (breve: logging)
Se i thread accoda solo informazioni fisse o varie-lenght in un file, è necessario utilizzare un filo comune. Dovrebbe utilizzare un buffer di scrittura relativamente grande, in modo che possa servire i thread dei client in modo rapido (prendendo semplicemente le stringhe) e svuotarlo della pianificazione ottimale e delle dimensioni del blocco. Dovrebbe usare un disco dedicato o persino un computer.
Inoltre, ci possono essere diversi problemi di prestazioni, ecco perché ci sono i server di registrazione in giro, anche quelli commerciali costosi.
Lettura e scrittura tempo casuale, posizione casuale (breve: database)
Richiede disegno complesso, con mutex ecc, non ho mai fatto questo genere di cose, ma posso immaginare. Chiedi ad Oracle alcuni trucchi :)
Sì, possono, ma si vuole davvero evitare di farlo esattamente nello stesso momento. Ci deve essere un po 'di coordinamento. Se parli di Bittorrent, penso che funzioni assemblando blocchi di offset noti in un file di dimensioni note. Ciò non può essere chiamato sequenzialmente o parallelamente, è più "accesso casuale". – Thilo
Domanda simile: http://stackoverflow.com/questions/6206472/what-is-the-best-way-to-write-to-a-file-in-a-parallel-thread-in-java – Vadzim