parallelo TPL per ciascuna coda o personalizzata per l'elaborazione di dati multithread

1

Sto cercando di eseguire quanto segue per migliaia di elementi:

1) ottiene i dati delle serie temporali per un oggetto dal file 2) calcolare la media e la deviazione standard 3) calcolare il calcolo finale utilizzando la media e la deviazione standard 4) aggiungi valore all'elenco

Attualmente il file è un enorme CSV di tutti gli elementi e tutte le date, quindi non c'è molto da usare per il multithreading, quindi lo caricherò in memoria.

Mi piacerebbe fare i calcoli tramite multithreading e spero di usare la TPL ( Task Parallel Library ) .

Ho una buona idea su come farlo, ad esempio potrei usare un parallelo per ognuno e fare quanto segue:

1) ottieni i dati delle serie temporali per articolo specifico 2) calcolare la media 3) calcola la deviazione standard 4) calcolare il calcolo finale 5) aggiungi al dizionario thread-safe

Anche se questo è multithreaded è ancora molto sequenziale all'interno del thread stesso, quindi ho pensato che quanto segue sarebbe stato meglio:

Coda per il recupero dei dati di timeseries Coda per gli articoli da elaborare per media e deviazione standard Coda per gli articoli da elaborare per il calcolo finale

Coppia di thread per coda che raccolgono e lavorano su ciascun elemento.

Fondamentalmente ci saranno molti benefici in me avere più controllo o dovrò semplicemente usare il parallelo per ognuno?

    
posta Simon Nicholls 28.07.2017 - 15:28
fonte

1 risposta

2

Even though this is multithreaded it still is very sequential within the thread itself

Non c'è niente di sbagliato in questo. Non ottieni punti bonus per il lancio di più thread; in effetti, quelli hanno un costo di prestazioni significativo quando si tenta di stabilire contesti di threading e tentare di accedere a risorse protette da meccanismi di concorrenza. Vuoi avere il minimo multithreading possibile mentre hai abbastanza thread per usare tutti i tuoi core.

Vorrei andare con Parallel.ForEach . Non pensarci troppo.

    
risposta data 01.08.2017 - 01:28
fonte

Leggi altre domande sui tag