LINUX.ORG.RU

История изменений

Исправление mersinvald, (текущая версия) :

Когда код изначально пишется как многопоточный, конечно.

Пример: был код, использовал внутри пару вложенных вызовов, на третьем уровне было использование синглтона. Изредка этот вложенный вызов что-то в синглтон писал. Изначально код синхронный, через несколько месяцев встал вопрос оптимизации в связи с ростом количества пользователей сервиса, распараллелили этот кусок кода, повесили мьютексы на то, что напрямую использовалось функцией.

В итоге имеем редкий плавающий баг, который в большой кодовой базе трудно локализовать.

Когда кодовые базы маленькие и команда небольшая, проблемы в общем-то нет, но с ростом численности строк и сотрудников у такой баги сильно вырастают шансы уйти незамеченной от code review.

Конечно, можно возразить что у хорошего разработчика и синглтон сразу заделан под многопоточность и анализ всего использованного кода при рефакторинге он произведет. Но я легко могу представить ситуацию, в которой этот синглтон и ветку исполнения добавлял какой-нибудь джун, когда код был еще однопоточный, по этому на этом ревьювер не заострил внимание, а потом другой такой же джун получил задачу распараллелить функцию. Ну а в дифф третья вложенность уже не попала, так что тоже прошла мимо ревьювера.

Глобальный изменяемый стейт — это вообще страшная дичь, но такое в ынтырпрайзах сплошь и рядом.

Исходная версия mersinvald, :

Когда код изначально пишется как многопоточный, конечно.

Пример: был код, использовал внутри пару вложенных вызовов, на третьем уровне было использование синглтона. Изредка этот вложенный вызов что-то в синглтон писал. Изначально код синхронный, через несколько месяцев встал вопрос оптимизации в связи с ростом количества пользователей сервиса, распараллелили этот кусок кода, повесили мьютексы на то, что напрямую использовалось функцией.

В итоге имеем редкий плавающий баг, который в большой кодовой базе трудно локализовать.

Когда кодовые базы маленькие и команда небольшая, проблемы в общем-то нет, но с ростом численности строк и сотрудников у такой баги сильно вырастают шансы уйти незамеченной от code review.

Конечно, можно возразить что у хорошего разработчика и синглтон сразу заделан под многопоточность и анализ всего использованного кода при рефакторинге он произведет. Но я легко могу представить ситуацию, в которой этот синглтон и ветку исполнения добавлял какой-нибудь джун, когда код был еще однопоточный, по этому на этом ревьювер не заострил внимание, а потом другой такой же джун получил задачу распараллелить функцию. Ну а в дифф третья вложенность уже не попала, так что тоже прошла мимо ревьювера.