W swoim przemówieniu - https://blog.golang.org/concurrency-is-not-parallelism, Rob Pike mówi, że procedury postępowania są podobne do wątków, ale o wiele tańsze. Czy ktoś może wyjaśnić, dlaczego?Dlaczego gorouts są znacznie tańsze niż wątki w innych językach?
Odpowiedz
Zobacz "How goroutines work".
Są one tańsze w: konsumpcji
- pamięci:
Wątek zaczyna się od dużej pamięci, w przeciwieństwie do kilku KB. - instalacji oraz przerwania koszty
(dlatego trzeba zachować pulę gwintem) - przełączania koszty
Nici są zaplanowane zapobiegawczo, a podczas przełącznik wątku, planista musi zapisać/przywrócić wszystkie rejestry.
W odróżnieniu od Go, w którym środowisko wykonawcze zarządza goroutinami od stworzenia do planowania, aż do rozładowania. A liczba rejestrów do zapisania jest mniejsza.
Plus, jak wspomniano w „Go’s march to low-latency GC” GC jest łatwiejsze do wdrożenia, gdy czas pracy jest odpowiedzialny za zarządzanie goroutines:
Od czasu wprowadzenia jej jednoczesnego GC w Go 1.5, środowisko wykonawcze śledzi, czy goroutine zostało wykonane, ponieważ jego stos został ostatnio zeskanowany. Faza zakańczania znaku sprawdzi każdą gromutynę, aby sprawdzić, czy niedawno została uruchomiona, i przeszuka te nieliczne, które miały.
W wersji 1.7 środowisko wykonawcze utrzymuje osobną krótką listę takich goroutines. Eliminuje to konieczność przeglądania całej listy goroutin podczas wstrzymania kodu użytkownika i znacznie zmniejsza liczbę dostępów do pamięci, które mogą wyzwalać kod migracji pamięci NUMA związany z kernelem.
- 1. Dlaczego kolekcje.Counter są znacznie wolniejsze niż ".count?
- 2. Ograniczenia i alternatywy dla prób w językach innych niż angielski?
- 3. Podstawowe wątki Java (4 wątki) są wolniejsze niż brak gwintowania.
- 4. Pobierz listę krajów w innych językach niż angielski
- 5. Analogi Goroutine w innych językach
- 6. NSMutableDictionary znacznie wolniejszy niż Java Map ... dlaczego?
- 7. Dlaczego UPDATE trwa znacznie dłużej niż SELECT?
- 8. Zautomatyzowane testowanie w językach RPG (lub innych językach ILE)
- 9. Dlaczego użycie preprocesora jest mniej powszechne w językach innych niż C/C++/ObjC?
- 10. SKGLView znacznie ciemniejszy niż SKCanvasView
- 11. Dlaczego identyfikatory list i łańcuchów są oznaczone "xs" (w Scala i innych językach)?
- 12. dlaczego MySQL JOIN jest znacznie szybszy niż WHERE IN (podzapytanie)?
- 13. Odpowiednik arkusza roboczego Scala IDE w innych językach?
- 14. Dlaczego C# kompiluje się znacznie szybciej niż C++?
- 15. Dlaczego programy typu fast fast są krótsze niż programy w stylu defensywnym?
- 16. Dlaczego kompresja PNG jest znacznie wolniejsza niż JPEG na Androida?
- 17. 2 wątki wolniejsze niż 1?
- 18. Dlaczego linie mniejsze niż 1.0pt nie są poprawnie wyświetlane na ekranach innych niż siatkówka?
- 19. framework cocoapods znacznie wolniejszy w mojej aplikacji niż w przykładzie
- 20. Dlaczego indeksy wyszukiwania gliste PostgreSQL są znacznie wolniejsze niż indeksy GIN?
- 21. Czy funkcja wyszukiwania pełnotekstowego MySql działa rozsądnie w językach innych niż łaciński (hebrajski, arabski, japoński ...)
- 22. Zmienny schemat użycia warunku w C/C++ i innych językach
- 23. Czy istnieją odpowiedniki dla metody Ruby's method_missing w innych językach?
- 24. W jaki sposób obsługiwana jest obsługa Javascript w innych językach?
- 25. Czy są to wątki bezpieczne?
- 26. Dlaczego zestawy są większe niż listy w pythonie?
- 27. Kiedy QLC są znacznie mniej wydajne?
- 28. Używanie czcionek innych niż iPhone
- 29. Dlaczego zmienne __block nie są zachowywane (w środowiskach innych niż ARC)?
- 30. Tworzenie wtyczek IntelliJ IDEA w innych językach JVM