понедельник, 1 ноября 2010 г.

Exception handling cost

Наши программисты делятся традиционно на два лагеря - те, кто принимает и активно использует исключения, и те, кто терпеть их не может (чаще всего в итоге выясняется, что люди просто не обладают навыками exception-safe programming, но есть и реальные представители "старой школы").

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

В качестве легкого введения в вопрос можно прослушать вот эту лекцию на Google.Video Exception Handling Cost. Информация, фактически, "от производителя": автор занимается обработчиками исключений в команде компилятора Visual C++.

К чему я это говорю?
В свое время у нас была великолепнейшая история, когда система вдруг начинала дико "тормозить" при определенном сочетании обстоятельств.

Расследование показало, что виноват один поток, занимающийся расчетами для рисования картографической информации, но вот причина вызвала шевеление волос на голове у всех разбиравшихся - автор кода (а код выполнялся внутри гигантского по объему цикла) чтобы подняться по стеку на два уровня вверх генерировал SEH-исключение плавающей арифметики (!), которое затем перехватывал через C++-catch (при нашем наборе опций компиляции это возможно). Проведенная беседа привела не к переписыванию этого кошмара, а к механической замене на throw()...
В итоге элементарное изменение алгоритма ускорило код в тысячи раз и эта проблема больше никогда не всплывала.

Upd. Вот здесь нашлась ссылочка на саму презентацию.

Комментариев нет: