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.