2009-11-14 12 views
5

Qualcuno sa approssimativamente qual è la dimensione minima del lavoro necessaria per una goroutine di beneficio (supponendo che ci siano nuclei liberi per il lavoro da scaricare a)?dimensioni minime del lavoro di una goroutine

+0

Si sarebbe probabilmente ottenere una risposta migliore nella mailing list Go: http://groups.google.com/group/golang-nuts/ –

+2

@RCIX: sì, vedi http: // golang. org/doc/effective_go.html # goroutines –

risposta

3

Sto attraversando il progetto euler con Go. Anche se non ho una risposta definitiva per te, ho trovato il setaccio di primalità basato su goroutine nei documenti di Go per essere un ordine di grandezza più lento del semplice controllo di ciascun numero per la primalità. Anche l'impostazione di GOMAXPROCS su un valore più elevato non ha aiutato.

+2

La parallelizzazione aiuta solo con la velocità se i risultati sono indipendenti o possono essere suddivisi in blocchi indipendenti. Il setaccio primario, tuttavia, dipende esplicitamente dai risultati precedenti: non è realmente parallelo se tutte le goroutine, tranne una, stanno bloccando in un dato momento. –

4

goroutine è un'astrazione che viene utilizzata se consente di modellare meglio l'applicazione. Stai facendo una programmazione orientata alla concorrenza, quindi pensa alle parti della tua applicazione che hanno una concorrenza al loro interno.

Pensa a un sistema OO e immagina di porre la stessa domanda sull'opportunità di creare un'istanza di un oggetto.

Fare la cosa che ha senso prima.

+0

Esattamente, le goroutine sono 'solo' un'astrazione concettuale molto utile per organizzare i tuoi programmi. Il fatto che contribuiscano ad aumentare le prestazioni rendendo la parallelizzazione semplice è solo un piacevole effetto collaterale. Le routine di routine – uriel

1

le goroutine sono leggere e non richiedono molte risorse. Dovresti usarli dove mai è appropriato al problema. Attualmente go non sembra essere eccezionalmente bravo nell'utilizzare più core (sembra ci sia un po 'troppo overhead nell'allocazione di thread host aggiuntivi.)

Penso che la vera questione sia quando utilizzare più core piuttosto che quando usa le goroutine. La risposta è probabilmente la stessa di altre lingue e processi host aggiuntivi. (Purtroppo non si può facilmente specificare quando un goroutine dovrebbe occupare un nuovo processo host o che elaborarlo dovrebbe occupare.)

+1

non allocano effettivamente nuovi thread in quanto le routine vengono applicate in modo diverso su thread di sistema esistenti. Fondamentalmente si riduce a quando è vantaggioso utilizzare più core; tuttavia, la risposta non sarà la stessa di altri linguaggi di altri linguaggi comparabili (c, C++, java) non hanno un costrutto parallelo integrato e devono essere gestiti manualmente o utilizzare un costrutto pre-compilatore come openMP – Mark

+0

Sì, Lo capisco. Il mio post commenta il fatto che il numero di processi host dovrebbe essere limitato quando si utilizzano le goroutine in situazioni in cui allocare processi host è inappropriato. –

1

Utilizzando goroutines non è solo di efficienza dell'hardware. A volte rendono il software più facile da scrivere e rendono più facile tenere lontani gli errori. Il linguaggio consente al programmatore di esprimere la concorrenza in modo naturale e semplice. Questo vale molto per me.

La mia esperienza con problemi che sono candidati naturali per la concorrenza è che facilmente mi consente di massimizzare tutti i core disponibili sui problemi legati alla CPU usando un banale approccio "scatter/gather". Il tuo chilometraggio può variare.

Hotei

Problemi correlati