Go dilinin goroutines'i nasıl düzenlediğini merak ediyorum. Sadece kanal istekleri ve I/O sırasında mı değişiyor yoksa periyodik bir coroutine anahtarlama döngüsüne mi sahip?Go, goroutines arasındaki bağlamın ne zaman değiştirileceğine nasıl karar veriyor?
6
A
cevap
8
Git henüz önleyici bir zamanlayıcı yok, ama bir planned for 1.2 olduğunu. Öyleyse, Go sadece CPU-only hesaplamaları sırasında içeriği değiştirmeyecektir, sadece I/O sırasında (bellekten okuma da zaten bir kayıtta değilse G/Ç olarak kabul edilir). Bununla ilgili bazı tartışmaları Issue 543 - preemptive scheduling'da okuyabilirsiniz.
İlgili konular
- 1. Go bir dosya ne zaman temizlenir?
- 2. Goroutines içinde goroutines başlatılması kabul edilebilir mi?
- 3. Bağlamın Zsh
- 4. Neden dosyamın ikili dosya olduğuna karar veriyor
- 5. SignalR, hangi aktarım yönteminin kullanılacağına nasıl karar veriyor?
- 6. http goroutines arasında mysql bağlantısı nasıl paylaşılır?
- 7. go install her zaman GOPATH
- 8. Özyinelemeli Goroutines, Go'ya kanaldan okumayı durdurabilmenin en iyi yolu nedir?
- 9. Byte [] boyutunun InputStream.read() için ne kullanacağına nasıl karar verirsiniz?
- 10. Go
- 11. Go
- 12. Google App Engine'de Goroutines kullanabilir miyim?
- 13. "go install./..." ifadesindeki "./..." ifadesi ne anlama geliyor?
- 14. Tek bir bağlamın liste tanımları
- 15. Go
- 16. GO
- 17. Go
- 18. GO
- 19. Tam olarak ne zaman runtime.Gosched yapar?
- 20. Go, Google App Engine
- 21. js "var" ne zaman gerekir?
- 22. User.Identity.IsAuthenticated her zaman PasswordSignInAsync başarı veriyor sonra her zaman false
- 23. RequireJS ne zaman arama asenkron gerektirir? Ne zaman senkronize edilir?
- 24. Ne zaman plugins.withType (somePlugin) .whenPluginlendirildi
- 25. Ne zaman kullanılmalı ve Aurelia'da ne zaman kullanılır?
- 26. [MTAThread] ne zaman kullanılmalıdır?
- 27. JavaScript'te MVC framework'ü ne zaman kullanmalıyım?
- 28. Bir Karar Ağacı Oluşturma
- 29. jQuery UI widget'ında _init ve _create arasında nasıl karar verilir?
- 30. Zaman birimi ne zaman geri döner?
Eğer doğru anlıyorsam, bu bağlantıların 'önleyici zamanlama' bölümünde anlatılanları çağırmak çok uzak. Bu gerçekten önleyici değildir, sadece verimler programcıya görünmeyecek şekilde daha fazla yere konur. Elbette, bu program daha “eşzamanlı” hale getirir, ama yine de kooperatiftir. Özel VM (Erlang gibi) kullanmadan veya doğrudan işletim sistemi desteği (OS iş parçacığı) kullanmadan önleyici çoklu görev yürütmenin imkansız olduğunu düşünüyorum. –
Cevabınızı güncelleyebilir misiniz? Go'nun bir süredir işlev çağrılarında ön-kayıt yapabildiğini duydum ama emin değilim. –