Wątek przeniesiony 2021-09-16 09:50 z Inne języki programowania przez cerrato.

Goroutines

0

Siema, jest mi w stanie ktoś wytłumaczyć w jaki sposób stack gorutyny jest mniejszy niż PTHREAD_STACK_MIN?

3

Goroutines nie są wątkami w rozumieniu systemu operacyjnego. To działa na zasadzie, że Go podczas startu odpala GOMAXPROCS systemowych wątków (pewien nie jestem, ale wydaje mi się, że domyślnie to jest ilość procesorów w systemie), a następnie jak odpalasz goroutine, to są one zarządzane całkowicie w userspace. W ten sposób ograniczenia systemowe, np. wartość PTHREAD_STACK_MIN nie ma tutaj żadnego zastosowania. Dodatkowo dzięki temu tworzenie nowych goroutines jest zdecydowanie szybsze niż "prawdziwych" wątków. Ogólnie jest to znane jako coroutines. Bardzo ważne też jest by pamiętać, że to jest narzędzie do współbieżności, nie paralelizacji (to drugie jest po prostu "pożytecznym efektem ubocznym").

1

zgadzam się z przedmówcą. Od siebie dodam tyle, że tym jaka goroutine będzie się wykonywać zajmuje się runtime a dokładnnie scheduler. On też zajmuje się tym, czy by gorotoutine były np w razie możliwości na jednym fizycznym wątku (zapobiega context switching). Bardzo dobry artykuł na ten temat znajduje się tu https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part2.html.

1

Chyba chodzi o to, że stos gorutyny jest poza stosem wątku, który wykonuje tę gorutynę. Teoretycznie wskaźnik stosu może wskazywać na dowolny adres w pamięci, niekoniecznie na stos przydzielony przez system operacyjny. Dobrze to rozumiem? Tak to jest w Go?

1 użytkowników online, w tym zalogowanych: 0, gości: 1