Sobes.tech
Back to questions
Middle
2

Что такое syscall? Как Go runtime обрабатывает блокирующие syscall'ы в модели GMP?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

Syscall (системный вызов) — это механизм, с помощью которого программа запрашивает услуги операционной системы, например, операции ввода-вывода, управление процессами, работу с файлами и т.д. Это переход из пользовательского режима в режим ядра.

В Go runtime используется модель GMP (G — goroutine, M — OS thread, P — processor), где P — это ресурс, необходимый для выполнения кода.

Когда goroutine выполняет блокирующий syscall, например, чтение из файла, runtime может:

  • Отвязать текущий M (поток ОС) от P, чтобы другой M мог использовать этот P для выполнения других goroutine.
  • Запустить новый поток M, чтобы не блокировать выполнение других goroutine.

Таким образом, Go runtime избегает блокировки всей программы из-за одного блокирующего syscall, обеспечивая высокую конкурентность и эффективное использование потоков ОС.

Пример: если goroutine вызывает syscall чтения, который блокируется, runtime может запустить другой поток для выполнения других goroutine, пока первый поток ждет завершения syscall.