Suggerirei che si tratti di eseguire pezzi di lavoro grandi indipendentemente, in gran parte, in qualsiasi ordine, senza produrre risultati diversi. (Salvo variazioni accettabili o buone .)
Tre candidati che cercherò:
- Interventi dispendiosi in termini di tempo in cui l'ordine di elaborazione non cambierà il risultato.
- Scopri che
DoWork()
deve accadere prima di aver bisogno dei risultati.
- Scopri che
DoWork()
deve accadere e non hai affatto bisogno di risultati .
In tutti e tre i casi, assicurati che l'impatto sullo stato condiviso sia gestibile o inesistente.
E ricorda che questi sono solo candidati . È necessario valutare quanto lavoro deve essere fatto e quanto può essere impigliato (o non aggrovigliato) quello che funziona con tutti gli altri lavori che l'applicazione potrebbe fare. E, quindi, sarebbe ideale per confrontare entrambe le soluzioni.
Ad esempio ...
Un'iterazione dispendiosa in termini di tempo in cui l'ordine di elaborazione non ha importanza.
Hai una percentuale massiccia di% co_de per cui devi calcolare la media il più velocemente possibile . La costruzione di una media è principalmente aggiunta, che è associativa . Quindi, possiamo eseguire l'aggiunta in blocchi di attività:
avg(data[0..z]) == ( sum(data[0..n]) + sum(data[n..m]) .. sum(data[x..z]) ) / data.Count;
(In realtà può essere suddiviso in modo più sofisticato compatibile con cluster , ma è un esempio ...)
So che List<Int32> data
deve accadere prima che tu abbia bisogno dei suoi risultati.
Stai rendendo un documento. Su quel documento, hai N componenti di vari tipi (immagini, blocchi di testo formattati, grafici, ecc.). Per semplificarlo, in questo scenario, ogni componente può renderizzare completamente in modo indipendente e restituire un componente grafico a LayoutEngine. E, LayoutEngine deve aspettare che ogni componente esegua il rendering e restituisca le sue dimensioni prima che possa posizionarle e darle da mangiare al DisplayEngine ... o qualsiasi altra cosa.
Non ho bisogno dei risultati di DoWork()
affatto .
Alcuni tipi di registrazione.
Se stai registrando le interazioni delle applicazioni per supportare gli sforzi di marcatura, ad esempio, potresti voler incenerire e dimenticare quegli eventi di registrazione. Se la registrazione richiede molto tempo o fallisce, non si desidera interrompere l'operazione o le prestazioni dell'applicazione.