2011-08-29 9 views
14

Per impostazione predefinita (senza .combine), foreach /% dopar% restituisce risultati in un elenco. L'ordine dei risultati nell'elenco è garantito per corrispondere all'ordine del ciclo/iterazione? In altre parole, l'ordine sarà lo stesso di quando si esegue l'iterazione sequenziale? O l'elenco viene popolato quando viene completata un'attività parallela? Navigando nella documentazione, vedo che c'è un parametro .inorder, ma sembra che si applichi solo quando si utilizza una funzione .combine.foreach% dopar% - garanzia dell'ordine dei risultati?

risposta

21

Al termine della chiamata, il risultato di foreach sarà nello stesso ordine di un ciclo "normale". Tuttavia, non vi è alcuna garanzia per l'ordine in cui "arrivano": in teoria (e parallelizzando, anche nella pratica), il primo elemento potrebbe essere compilato più tardi del secondo.

Quindi non si ha alcuna garanzia sull'ordine di esecuzione (ad esempio, le barre di avanzamento o la registrazione possono essere acciottolate), ma si può essere certi che i risultati saranno nell'ordine in cui li si aspetta.

+1

Nick - grazie! Ho apprezzato la distinzione tra ordine di esecuzione e ordine dei risultati – SFun28

Problemi correlati