Compito parallelo. Per parallelo.foreach caricamento bilanciamento, partiioning .net
-
27-10-2019 - |
Domanda
Eseguire i metodi paralleli paralleli. Per e paralleli.foreach,
fornire internamente il proprio bilanciamento e il loro partizionamento del carico per funzionare meglio?
In tal caso e quali circostanze vuoi scrivere Crea le tue partizioni usando la classe del partizione per migliorare le prestazioni?
Soluzione
Le routine hanno fornito il proprio partizionamento.
Si basano su scenari "tipici", ma a volte possono richiedere una guida, in particolare in situazioni insolite.
Ad esempio, il partizionamento predefinito per IEnumerable<T>
implementazioni (che non implementano IList<T>
) inizierà con un piccolo gruppo per attività e crescerà lentamente di dimensioni. Tuttavia, se conosci il tuo IEnumerable<T>
sta per nutrire lentamente un elemento alla volta, questo causerà un blocco, come il Parallel
La classe "aspetterà" l'articolo successivo fino a quando non riceverà abbastanza elementi per una partizione e la pianifica.
Fornendo il tuo partizionatore, puoi prevenirlo e ottenere un migliore rendimento.
Un altro ottimo esempio di dove un partizionatore personalizzato aiuta è se si dispone di piccole quantità di lavoro per loop. In questo caso, il partizionamento di te stesso e il lavoro sulla partizione evita inutili spese generali. Questo è coperto da Come: accelerare piccoli corpi ad anello Pagina su msdn.