За использование мьютексов в обычном Go'шном коде надо выкидывать на мороз — увольнять или ставить в очередь на увольнение.
Artikel ansehen
Zusammenfassung ansehen
Для прикладных задач следует использовать каналы, в рамках CSP-подхода к многопоточности (Communicating sequential processes). Поскольку этот подход (концепция) проще для восприятия и контроля происходящего. Легко моделируется и верифицируется посредством всяких TLA+ и аналогов.
Бывает необычный Go'шный код? В тех случаях, когда пишется расширение стандартной библиотеки в плане контейнеров. В конце концов, те же самые каналы как раз под капотом у себя и содержат мьютексы. Вот только вещи такие крайне редко пишутся, такого рода специальные средства библиотек создаются одним человеком на миллион обычных пользователей языка.
По части интеллекта надо быть крайне альтернативно одарённым, чтобы свою задачу ставить в один ряд с чем-то подобным.
Крайне редко кто-то пишет специальные универсальные контейнеры и компоненты библиотек, предоставляющие какие-то примитивы и сущности, сродни каналов, мейлбоксов. Поэтому работает хорошее правило — как только возникает потребность в любом мьютексе, значит есть ошибка в проектировании. И сперва она вылезает в виде ухода от CSP в пользу подхода Shared Memory, становясь явным техническим долгом, а потом делает кодовую базу непригодной к поддержке или наращиванию. Всё что можно будет сделать с таким кодом, это обращаться с ним как с одноразовым — выкинуть и забыть.
Ловушка мышления тут в том, что одноразовый код не представляет ничего особенно страшного для людей привыкших придерживаться нормальной микросервисной архитектуры. Где считается вот этим самым микросервисом то самое, что проще каждый раз написать с нуля, чем изменять и отлаживать изменения :)
Таким людям крайне сложно объяснить почему кодовая база вообще должна быть без технического долга и такого рода косяков. В дополнению к вложению кучи времени и сил в создание и поддержание истинно микросервисной архитектуры. Встречается это в in-house разработка — компаний живущих с онлайн-сервисов (Авито, Яндекс, Озон, ВК и т.д. и т.п.)
Как ставить в очередь на увольнение? Выносить дисциплинарное взыскание штатным порядком, приказом по организации. Если за год набирается три штуки таких официальных взыскания, то можно увольнять «по статье» полностью соблюдая ТК РФ и нюансы Трудового Права РФ (которые не ограничиваются одним лишь ТК РФ).
#
могопоточность #
multithreading #
CSP #
software-development #
golang #
go #
программирование #
programming #
lang_ru @
Russia