Работа с конкурентностью в Go (Golang) (6/2024)
Working with Concurrency in Go (Golang)
Скачать Working with Concurrency in Go (Golang) вы можете на нашем сайте. Мы предлагаем бесплатные IT-курсы с переводом на русский по направлениям: Веб-разработка, ML/AI, DevOps, Mobile и многим другим, которые помогут в вашей IT карьере.
О курсе
Чему вы научитесь
- Узнаете о различных способах, которыми Go упрощает работу с конкурентным программированием
- Поймёте, как работает конкурентность, её преимущества и подводные камни
- Изучите работу WaitGroup, Mutex и каналов
- Освоите конкурентность на практике, решая классические задачи информатики и создавая реальный проект
Требования
- Хорошее понимание языка программирования Go
- Компьютер на Windows, macOS или Linux с подключением к интернету
Описание
Go, часто называемый Golang, хорошо известен тем, что делает работу с конкурентностью удивительно простой. Чтобы запустить функцию конкурентно, достаточно добавить слово «go» перед её вызовом, и она радостно выполняется в фоновом режиме как горутина (GoRoutine). Встроенный планировщик Go заботится о том, чтобы каждая горутина запускалась когда нужно и максимально эффективно.
Однако это не означает, что работа с конкурентностью в Go проста — потокобезопасное программирование требует тщательного планирования, и, что важнее всего, разработчики должны иметь абсолютно твёрдое понимание того, как Go работает с конкурентностью.
В стандартной библиотеке Go предлагает несколько способов работы с конкурентно выполняющимися частями программы: sync.WaitGroup — позволяет ожидать завершения задач; sync.Mutex — позволяет блокировать и разблокировать ресурсы, чтобы две горутины не могли одновременно обращаться к одному участку памяти; и, наконец, каналы (Channels) — позволяют горутинам отправлять и получать данные друг от друга.
Подход Go к конкурентности достаточно прямолинеен и в целом выражается мантрой: «Не общайтесь через разделяемую память; вместо этого разделяйте память через общение». Каналы — это средство, с помощью которого мы обычно разделяем память через общение.
В этом курсе мы подробно рассмотрим использование WaitGroup, Mutex и каналов. Также мы разберём проблемы, присущие конкурентности, включая преждевременное завершение программы и состояния гонки (race conditions). Сначала мы получим хорошее понимание работы этих механизмов, решая классические задачи информатики: «Обедающие философы», «Производитель-потребитель» и «Спящий парикмахер». Эти задачи стали классикой не просто так: они заставляют разработчика искать лучший подход к работе с кодом, выполняющимся конкурентно или параллельно.
В завершение курса мы решим более «реальную» задачу: регистрация клиента в подписочном сервисе с обработкой выставления счетов, регистрации и всего необходимого для подключения нового клиента. Естественно, мы сделаем это максимально быстро, разбив задачи на более мелкие и запустив их конкурентно.
Материал предоставлен только для справки и ознакомления.
Поддержите автора, купив у него курс!