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
risposta
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.
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. –
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.
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
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.)
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
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. –
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
- 1. Ritaglia un'immagine PNG alle dimensioni minime
- 2. Dimensioni gruppo di lavoro
- 3. Le dimensioni del lavoro globale devono essere multiple della dimensione del gruppo di lavoro in OpenCL?
- 4. Dimensioni minime per pulsanti in Windows Phone 8.1
- 5. Il lancio di goroutine all'interno delle goroutine è accettabile?
- 6. Programmazione del codice C e goroutine
- 7. Forzatura di goroutine nello stesso thread
- 8. Perché fmt.Println all'interno di una goroutine non stampa una riga?
- 9. Devo utilizzare i vincoli di visualizzazione o le dimensioni minime della finestra?
- 10. dipendenze minime per JasperReports
- 11. Come segnalare a una goroutine di smettere di funzionare?
- 12. Capire le goroutine
- 13. Come funzionano le goroutine?
- 14. Client di fatturazione per modifiche minime
- 15. Collegamento cartella di lavoro di Excel per dimensioni file grandi
- 16. Calendario di Richfaces Date minime e massime
- 17. Test Golang Goroutine
- 18. Come creare un file zip di dimensioni minime (vuoto), che ha 22B?
- 19. Perdita di memoria Golang relativa alle goroutine
- 20. Cosa va nell'oggetto cartella di lavoro di Excel che aumenta le dimensioni del file?
- 21. Java: Intervallo di date minime e massime
- 22. Come implementare un NSSplitView a 3 pannelli con dimensioni minime e massime?
- 23. Come utilizzare un pool di goroutine
- 24. Posso utilizzare Goroutine in Google App Engine?
- 25. Configurare la directory di lavoro del foglio di lavoro Scala
- 26. Hash alfanumerico corto Python con collisioni minime
- 27. Dimensioni testo di una spilla
- 28. Come cucire immagini con sovrapposizioni minime?
- 29. JavaQuartz Persistenza del lavoro
- 30. Come moltiplicare due quaternioni con istruzioni minime?
Si sarebbe probabilmente ottenere una risposta migliore nella mailing list Go: http://groups.google.com/group/golang-nuts/ –
@RCIX: sì, vedi http: // golang. org/doc/effective_go.html # goroutines –