Где сoncurrency появляется в обычном Go-сервисе
Чтобы столкнуться с задачами конкурентного программирования, не обязательно работать над высоконагруженной системой. Они возникают и в обычных backend-задачах.
Например:
〰️Общий кэш → как организовать работу с состоянием, к которому обращаются несколько горутин?
〰️Ограничение параллельных запросов → как контролировать количество одновременно выполняемой работы и учитывать доступные ресурсы?
〰️ Фоновая обработка → как координировать несколько задач, передавать между ними данные и понимать, когда работа завершена?
〰️ Отмена запроса или остановка сервиса → как передать сигнал о завершении работы связанным операциям?
В каждом случае вопрос не сводится к тому, чтобы "добавить горутину". Возникают отдельные инженерные вопросы: где есть общее состояние, какие ресурсы разделяют задачи, как они взаимодействуют между собой и что должно происходить при отмене или завершении работы.
На курсе Concurency in Go эти задачи последовательно связываются с примитивами синхронизации, каналами и горутинами. После теории можно закреплять материал на самостоятельной практике и разбирать, почему конкретное решение подходит под одни условия и требует другого подхода при их изменении.
А где concurency появляется у вас - в текущем проекте или в задаче, с которой предстоит столкнуться?
Post #44
144
