[{"data":1,"prerenderedAt":114},["ShallowReactive",2],{"content:\u002F03-concurrency\u002F00-intro":3},{"title":4,"description":5,"path":6,"body":7},"Введение в конкурентность","Конкурентность в Go нужна не для красивых примеров с каналами, а для обычной backend-жизни: одновременно обработать запросы, сходить в несколько внешних систем, отменить долгую операцию, не положить сервис утечкой горутин.","\u002F03-concurrency\u002F00-intro",{"type":8,"value":9,"toc":107},"minimark",[10,14,17,25,28,33,75,77,81,84,87,89,93],[11,12,4],"h1",{"id":13},"введение-в-конкурентность",[15,16,5],"p",{},[15,18,19,20,24],{},"Главная сложность не в запуске ",[21,22,23],"code",{},"go func()",". Запустить горутину легко. Сложнее понять, кто владеет данными, кто останавливает работу, где проходит граница ответственности и как не оставить фоновый процесс жить после того, как он уже никому не нужен.",[26,27],"hr",{},[29,30,32],"h2",{"id":31},"что-будет-внутри","Что будет внутри",[34,35,36,40,60,66,69,72],"ul",{},[37,38,39],"li",{},"горутины и каналы как базовая модель коммуникации;",[37,41,42,45,46,49,50,49,53,49,56,59],{},[21,43,44],{},"sync",": ",[21,47,48],{},"Mutex",", ",[21,51,52],{},"RWMutex",[21,54,55],{},"WaitGroup",[21,57,58],{},"Once",", атомики;",[37,61,62,65],{},[21,63,64],{},"context",": отмена, таймауты, propagation через вызовы;",[37,67,68],{},"планировщик Go и то, почему горутины дешевле OS threads;",[37,70,71],{},"практические паттерны: worker pool, pipeline, fan-out\u002Ffan-in;",[37,73,74],{},"lock-free подходы и границы их применимости.",[26,76],{},[29,78,80],{"id":79},"как-понять-что-модуль-освоен","Как понять, что модуль освоен",[15,82,83],{},"Вы можете объяснить, как горутина завершится, что произойдёт при закрытии канала, где нужна блокировка, а где лучше передать данные через канал. Вы не используете конкурентность \"на всякий случай\" и умеете видеть цену каждого параллельного участка.",[15,85,86],{},"Особенно важный навык: читать код и находить места, где возможны race condition, deadlock или утечка горутин.",[26,88],{},[29,90,92],{"id":91},"рабочие-ориентиры","Рабочие ориентиры",[34,94,95,98,101],{},[37,96,97],{},"У каждой горутины должен быть понятный владелец и понятный способ завершиться.",[37,99,100],{},"Канал передаёт не только данные, но и право продолжить работу.",[37,102,103,104,106],{},"Если общий mutable state проще защитить ",[21,105,48],{},", не усложняйте код каналами ради канонов.",{"title":108,"searchDepth":109,"depth":109,"links":110},"",2,[111,112,113],{"id":31,"depth":109,"text":32},{"id":79,"depth":109,"text":80},{"id":91,"depth":109,"text":92},1781022063888]