Урок объясняет базовые принципы конкурентности в Go: разницу между потоками и асинхронностью, недетерминированность выполнения, распределение задач между ядрами процессора и то, как Go автоматически управляет конкурентным кодом.
Конкурентность --- это возможность выполнять несколько задач одновременно. Go делает это проще благодаря встроенным примитивам и автоматическому управлению планировщиком.
Обычный код выполняется построчно, одна инструкция за раз. Конкурентный код позволяет нескольким частям программы выполняться:
Go автоматически решает, какой режим использовать.
На многоядерных системах разные куски работы могут быть распределены между ядрами. Основная идея:
Асинхронный код способен:
Пока одна задача ждёт (например, сеть или диск), другие продолжают выполняться.
Обычный однопоточный код ведёт себя детерминированно: результаты всегда одинаковы.
Конкурентный код:
Go предоставляет универсальный механизм, который скрывает различия между
потоками и асинхронностью.
Программист работает с горутиной --- лёгкой задачей, запускаемой через
go:
go doWork()
Go решает: