2017-01-28 12 views

Odpowiedz

4

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.

Powiązane problemy