Go делит syscall'ы на два типа. Неблокирующие (сеть) идут через netpoller без отвязки потока. Блокирующие (файлы, cgo) вызывают handoff — поток M отвязывается от P, P передаётся другому потоку. Когда syscall завершается, поток пытается забрать свой P обратно. Если не получается — горутина ставится в глобальную очередь, а поток паркуется.
Как Go обрабатывает системные вызовы?
Senior
90 просмотровAFK Offer AI
Что такое distributed lock через БД?