Sono curioso di sapere come la lingua Go programma le goroutine. Commuta solo durante le richieste di canale e I/O o ha un ciclo di commutazione periodica di coroutine?Come si decide quando passare al contesto tra le goroutine?
6
A
risposta
8
Go non ha ancora un programma di pianificazione preventiva, ma uno è planned for 1.2. Quindi no, Go non cambierà contesto durante i calcoli della sola CPU, solo durante I/O (anche la lettura dalla memoria è considerata I/O se non è già in un registro). Puoi leggere alcune discussioni a riguardo in Issue 543 - preemptive scheduling.
Problemi correlati
- 1. Come funzionano le goroutine?
- 2. Come passare IDbConnection al contesto EF?
- 3. differenza tra Prelazione e il contesto passare
- 4. Come si decide quando contrassegnare una funzione come non sicura?
- 5. Come condividere la connessione mysql tra le goroutine http?
- 6. Come capovolgere le coordinate quando si disegna nel contesto?
- 7. Capire le goroutine
- 8. Come si decide quale porta utilizzare?
- 9. Passare le proprietà a un contesto Spring
- 10. Come si passano le informazioni di contesto del modello quando si utilizza HttpResponseRedirect in Django?
- 11. Android Come passare LinkedHashMap tra le attività?
- 12. CLR non è stato in grado di passare dal contesto COM 0x3b2d70 al contesto COM
- 13. Come si decide tra l'uso di una classe astratta e un'interfaccia?
- 14. Passare parametri al modello senza sovrascrivere il contesto dati
- 15. Come passare valori (parametri) tra le pagine XAML?
- 16. Passare le opzioni al modulo ES6 importa
- 17. Passare le opzioni di MSBuild quando si chiama devenv
- 18. In che modo Java decide quando importare?
- 19. Quando WebGL decide di aggiornare il display?
- 20. Come ottenere NESSUN contesto quando si usa svn diff
- 21. Come si decide quale dimensione byte [] usare per InputStream.read()?
- 22. Quando di passare cultura quando si confrontano le stringhe utilizzando Assert.AreEqual() in C#
- 23. Come passare il contesto alla funzione anonima?
- 24. Come passare il contesto a AsyncTask?
- 25. Come passare il contesto dall'attività all'attività?
- 26. Come passare il corpo della richiesta nel contesto GraphQL?
- 27. Come passare i dati dinamici al modello quando createDialog utilizzato
- 28. Come passare le dipendenze in base al profilo di build
- 29. Come passare le credenziali dell'utente al servizio web?
- 30. Come si chiude un canale che inviano più goroutine?
Se ho capito bene, chiamare ciò che è descritto nella "pianificazione preventiva" di questi collegamenti è troppo inverosimile. Non è davvero preventivo, è solo che i rendimenti sono messi in più posti, invisibilmente al programmatore. Certo, questo rende il programma più "concorrente", ma è ancora cooperativo. Penso che sia impossibile fare il multitasking preemptive senza usare VM speciali (come Erlang) o senza il supporto diretto del SO (thread del sistema operativo). –
Potresti aggiornare la tua risposta? Ho sentito dire che Go è stato in grado di anticipare le chiamate di funzione per un po 'di tempo, ma non lo so per certo. –