Как Go обрабатывает системные вызовы?

Senior
90 просмотров
AFK Offer AI

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

Следующий вопрос

Что такое distributed lock через БД?