Analizza simultaneamente i record in un file binario in Go

1

Ho un file binario che voglio analizzare. Il file è suddiviso in record che sono 1024 byte ciascuno. I passaggi di alto livello necessari sono:

  1. Leggi 1024 byte alla volta dal file.
  2. Analizza ogni "record" a 1024 byte (chunk) e posiziona i dati analizzati in una mappa o in una struct.
  3. Restituisce i dati analizzati all'utente e qualsiasi errore (s).

A causa dei vincoli I / O, non penso che abbia senso tentare letture dal file. Tuttavia, non vedo alcuna ragione per cui i record a 1024 byte non possano essere analizzati usando le goroutine in modo che vengano analizzati più record a 1024 byte contemporaneamente. Sono nuovo di Go, quindi volevo vedere se questo ha un senso o se c'è un modo migliore (più veloce):

  1. Una funzione principale apre il file e legge 1024 byte alla volta in matrici di byte (record).
  2. I record vengono passati a una funzione che analizza i dati in una mappa o struttura. La funzione parser sarebbe chiamata come goroutine su ogni record.
  3. Le mappe / strutture analizzate vengono aggiunte a una sezione tramite un canale. Vorrei preallocare l'array sottostante gestito dalla slice come dimensione del file (in byte) divisa per 1024 poiché questo dovrebbe essere il numero esatto di elementi (supponendo che non vi siano errori).

Questo sembra essere un produttore con più consumatori (almeno il modo in cui ci sto pensando). Sono a conoscenza di un esempio di questo modello in Go, ma non sono sicuro che questo cambi quando si legge in modo contiguo da un file (sembra che le letture simultanee rallenterebbero le cose, quindi solo un produttore, ma molti utenti che analizzano potrebbero accelerare le cose, ma devo assicurarmi di non esaurire nemmeno la memoria).

    
posta Dan 06.04.2017 - 06:08
fonte

0 risposte

Leggi altre domande sui tag