Sobes.tech
Junior — Middle

W jaki sposób realizowane są wywołania systemowe blokujące wykonywanie procesów lub wątków?

sobes.tech AI

Odpowiedź od AI

Wywołania systemowe, które blokują wykonywanie procesów lub wątków, działają w następujący sposób: gdy proces lub wątek wywołuje takie wywołanie systemowe (np. odczyt z pliku lub oczekiwanie na zdarzenie), wykonywanie jest wstrzymane do momentu zakończenia operacji. W tym czasie jądro systemu operacyjnego przełącza proces lub wątek w stan oczekiwania (blokady), zwalniając CPU dla innych zadań.

W Go, podczas wywoływania blokujących wywołań systemowych, runtime korzysta z mechanizmów planisty goroutines i wątków systemowych. Jeśli goroutine zablokuje się na wywołaniu systemowym, runtime może przełączyć wykonanie na inną goroutine, nie blokując całego wątku systemowego. Dzięki temu zasoby są wykorzystywane efektywnie i możliwa jest paralelność.

Przykład: podczas odczytu z sieci za pomocą net.Conn.Read() goroutine zostaje zablokowana, ale runtime przełącza się na inne goroutines, podczas gdy dane są odbierane.