Ho un enorme file di testo separato dalla linea e voglio fare alcuni calcoli su ogni riga. Ho bisogno di fare un programma multithread per processarlo perché è l'elaborazione di ogni linea che impiega più tempo per completare piuttosto che leggere ogni riga. (Il collo di bottiglia sta nella elaborazione della CPU, piuttosto che il IO)Accesso Muti-threaded allo stesso file di testo
Ci sono due opzioni mi si avvicinò con:
1) aprire il file dal thread principale, creare un blocco sul file handle e passare i gestire tutti i thread di lavoro e consentire a ciascun lavoratore di accedere direttamente al file direttamente
2) Creare un'impostazione di produttore/utente in cui solo il thread principale ha accesso diretto al file e alimenta le righe per ogni thread di lavoro utilizzando una coda condivisa
Cose da sapere:
- Sono molto interessato a prestazioni di velocità per questo compito
- Ogni linea è indipendente
- sto lavorando questo in C++, ma credo che il problema qui è un po 'indipendente dal linguaggio
Quale opzione sceglieresti e perché?
quanti processori userete e quanto è grande il file? – amit
il file è di circa 20 GB e in futuro le implementazioni saranno ancora più grandi. Attualmente sto lavorando su 4 core – Alexandros
@Alexandros: so che sono in ritardo per rispondere :). Ma non assegnare un blocco di linee a ciascun thread è molto più semplice? È possibile calcolare in anticipo il blocco per ogni thread utilizzando un puntatore a file singolo e in seguito ogni thread apre il file e cerca la posizione calcolata in precedenza. Penso che questo approccio sarà più facile e veloce – Arunmu