[{"data":1,"prerenderedAt":384},["ShallowReactive",2],{"content:\u002F03-concurrency\u002Fresources":3},{"title":4,"description":5,"path":6,"body":7},"Дополнительные материалы: Многопоточность","Русскоязычная подборка по конкурентности: видео, статьи Хабра и практические разборы, которые помогают увидеть не только синтаксис, но и типичные production-ошибки.","\u002F03-concurrency\u002Fresources",{"type":8,"value":9,"toc":374},"minimark",[10,15,18,23,86,90,164,168,216,220,262,266,311,315],[11,12,14],"h1",{"id":13},"дополнительные-материалы-по-многопоточности","Дополнительные материалы по многопоточности",[16,17,5],"p",{},[19,20,22],"h2",{"id":21},"горутины-и-каналы","Горутины и каналы",[24,25,26,42,62,70,78],"ul",{},[27,28,29,36,37,41],"li",{},[30,31,35],"a",{"href":32,"rel":33},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=wHQBMDInWEg",[34],"nofollow","Горутины, каналы, пакет sync: конкурентность в Go | Maksim Zhashkevych, YouTube"," — русскоязычный разбор конкурентности, горутин, каналов и ",[38,39,40],"code",{},"sync"," на примерах.",[27,43,44,49,50,53,54,57,58,61],{},[30,45,48],{"href":46,"rel":47},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ngEj0ZwQEn0",[34],"Concurrency: каналы, deadlock | ThisIsIT, YouTube"," — урок про ",[38,51,52],{},"nil","-, буферизированные и небуферизированные каналы, ",[38,55,56],{},"close",", ",[38,59,60],{},"range"," и deadlock.",[27,63,64,69],{},[30,65,68],{"href":66,"rel":67},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F490336\u002F",[34],"Анатомия каналов в Go | Хабр"," — большой материал про устройство каналов и практику использования.",[27,71,72,77],{},[30,73,76],{"href":74,"rel":75},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F926292\u002F",[34],"Каналы (channels) в Go | Хабр"," — свежий обзор каналов, внутреннего устройства runtime и паттернов.",[27,79,80,85],{},[30,81,84],{"href":82,"rel":83},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F759584\u002F",[34],"Практика Go: Concurrency | Хабр"," — перевод Dave Cheney с инженерными правилами для конкурентного кода.",[19,87,89],{"id":88},"пакет-sync","Пакет sync",[24,91,92,112,131,141,152],{},[27,93,94,99,100,103,104,107,108,111],{},[30,95,98],{"href":96,"rel":97},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=RaMQrV7x-1k",[34],"WaitGroup, Data Race, Mutex\u002FRWMutex | ThisIsIT, YouTube"," — видеоурок по ",[38,101,102],{},"WaitGroup",", гонкам данных, ",[38,105,106],{},"Mutex"," и ",[38,109,110],{},"RWMutex",".",[27,113,114,119,120,57,122,57,125,107,128,111],{},[30,115,118],{"href":116,"rel":117},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F933464\u002F",[34],"Потоки, горутины, синхронизация и мьютексы в Go | Хабр"," — короткое введение в синхронизацию, мьютексы, ",[38,121,102],{},[38,123,124],{},"Once",[38,126,127],{},"Cond",[38,129,130],{},"atomic",[27,132,133,138,139,111],{},[30,134,137],{"href":135,"rel":136},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F850018\u002F",[34],"Go sync.WaitGroup и проблема с выравниванием | Хабр"," — продвинутый материал про внутренности ",[38,140,102],{},[27,142,143,148,149,151],{},[30,144,147],{"href":145,"rel":146},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F956690\u002F",[34],"Concurrency на примерах: собственная реализация Mutex на Go | Хабр"," — полезно после темы ",[38,150,106],{},", чтобы увидеть примитив синхронизации под капотом.",[27,153,154,159,160,163],{},[30,155,158],{"href":156,"rel":157},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F338718\u002F",[34],"Разбираемся с новым sync.Map в Go 1.9 | Хабр"," — старая, но полезная отправная точка для понимания, когда ",[38,161,162],{},"sync.Map"," уместен.",[19,165,167],{"id":166},"context","Context",[24,169,170,181,192,200,208],{},[27,171,172,177,178,180],{},[30,173,176],{"href":174,"rel":175},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fpt\u002Farticles\u002F764850\u002F",[34],"Пакет context в Go: взгляд профессионала | Хабр \u002F Positive Technologies"," — сильный обзор ",[38,179,166],{},", API и эволюции пакета.",[27,182,183,188,189,191],{},[30,184,187],{"href":185,"rel":186},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F827544\u002F",[34],"Golang: context изнутри | Хабр"," — внутреннее устройство ",[38,190,166],{},", хорошо для тех, кому уже понятна базовая отмена.",[27,193,194,199],{},[30,195,198],{"href":196,"rel":197},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F921902\u002F",[34],"Каскадная отмена контекстов в Go | Хабр"," — фокус на propagation, отмене и production-паттернах.",[27,201,202,207],{},[30,203,206],{"href":204,"rel":205},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F864348\u002F",[34],"Понимание контекста | Хабр"," — компактное объяснение, зачем контекст нужен в цепочках горутин.",[27,209,210,215],{},[30,211,214],{"href":212,"rel":213},"https:\u002F\u002Frutube.ru\u002Fvideo\u002F8ea11f90941ceda3948230cfd869ed83\u002F",[34],"Concurrency: Context | ThisIsIT, Rutube"," — русскоязычный видеоурок про виды контекстов и операции над ними.",[19,217,219],{"id":218},"планировщик-go","Планировщик Go",[24,221,222,230,238,246,254],{},[27,223,224,229],{},[30,225,228],{"href":226,"rel":227},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=kedW1xO3Zbo",[34],"Планировщик Go: самый подробный гайд простым языком | Николай Тузов, YouTube"," — глубокое видео про GMP-модель и поведение runtime.",[27,231,232,237],{},[30,233,236],{"href":234,"rel":235},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0Eb5KeNQV5E",[34],"ПЛАНИРОВЩИК GO: КАК ОН УСТРОЕН | vanyaio, YouTube"," — русскоязычное видео про GMP, очереди, потоки ОС и роль scheduler.",[27,239,240,245],{},[30,241,244],{"href":242,"rel":243},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Ftimeweb\u002Farticles\u002F989782\u002F",[34],"Планировщик Go | Хабр \u002F Timeweb"," — подробный современный разбор планировщика на Go 1.24.",[27,247,248,253],{},[30,249,252],{"href":250,"rel":251},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F743266\u002F",[34],"Go scheduler простыми словами | Хабр"," — хорошее введение в модель G\u002FM\u002FP.",[27,255,256,261],{},[30,257,260],{"href":258,"rel":259},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F333654\u002F",[34],"Work-stealing планировщик в Go | Хабр"," — короткий перевод про work-stealing как мост к GMP-модели.",[19,263,265],{"id":264},"паттерны-конкурентности","Паттерны конкурентности",[24,267,268,276,284,292,300],{},[27,269,270,275],{},[30,271,274],{"href":272,"rel":273},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F1003418\u002F",[34],"Паттерны конкурентности в Go: Worker Pool | Хабр"," — свежий разбор worker pool и слабых мест наивной реализации.",[27,277,278,283],{},[30,279,282],{"href":280,"rel":281},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F1013072\u002F",[34],"Паттерны конкурентности в Go: Fan-Out\u002FFan-In | Хабр"," — продолжение про распределение работы и сбор результатов через каналы.",[27,285,286,291],{},[30,287,290],{"href":288,"rel":289},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F1021488\u002F",[34],"Паттерны конкурентности в Go: Pub\u002FSub | Хабр"," — пример pub\u002Fsub и обсуждение data race при общей map.",[27,293,294,299],{},[30,295,298],{"href":296,"rel":297},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F744038\u002F",[34],"Go: особенности написания конкурентных программ | Хабр"," — практические ошибки: утечки горутин, scope, cancellation, каналы.",[27,301,302,307,308,111],{},[30,303,306],{"href":304,"rel":305},"https:\u002F\u002Fwww.pvsm.ru\u002Fconcurrency\u002F330359",[34],"Как не ошибиться с конкурентностью в Go | PVSM"," — русская расшифровка доклада GopherCon Russia про concurrency, race detector и ",[38,309,310],{},"errgroup",[19,312,314],{"id":313},"lock-free-и-алгоритмы-синхронизации","Lock-free и алгоритмы синхронизации",[24,316,317,329,337,355,363],{},[27,318,319,324,325,328],{},[30,320,323],{"href":321,"rel":322},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F744822\u002F",[34],"Атомики в Go: особенности внутренней реализации | Хабр"," — сильный RU-friendly материал про ",[38,326,327],{},"sync\u002Fatomic",", ассемблерные реализации и отличие от mutex.",[27,330,331,336],{},[30,332,335],{"href":333,"rel":334},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fotus\u002Farticles\u002F557312\u002F",[34],"Go: справляемся с конфликтами при блокировках с помощью пакета atomic | Хабр \u002F OTUS"," — вводный материал про atomic как способ снизить contention.",[27,338,339,344,345,57,348,351,352,111],{},[30,340,343],{"href":341,"rel":342},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F930864\u002F",[34],"Барьеры памяти в Golang | Хабр"," — про memory barriers, ",[38,346,347],{},"Load",[38,349,350],{},"Store",", CAS и связь с ",[38,353,354],{},"sync.Mutex",[27,356,357,362],{},[30,358,361],{"href":359,"rel":360},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F195948\u002F",[34],"Lock-free структуры данных: атомарность и атомарные примитивы | Хабр"," — не Go-specific, зато хороший фундамент по атомарности и lock-free мышлению.",[27,364,365,370,371,373],{},[30,366,369],{"href":367,"rel":368},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F230349\u002F",[34],"Lock-free структуры данных: диссекция очереди | Хабр"," — углубление после ",[38,372,130],{},": очереди, CAS и проблемы reclamation.",{"title":375,"searchDepth":376,"depth":376,"links":377},"",2,[378,379,380,381,382,383],{"id":21,"depth":376,"text":22},{"id":88,"depth":376,"text":89},{"id":166,"depth":376,"text":167},{"id":218,"depth":376,"text":219},{"id":264,"depth":376,"text":265},{"id":313,"depth":376,"text":314},1781022063875]