Re[2]: [Investigation] Exceptions vs. Return Values
От: remark Россия http://www.1024cores.net/
Дата: 31.03.07 12:39
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>Здравствуйте, remark, Вы писали:


СМ>работа проделана большая,


R>>

Выводы

R>>Общие выводы какие возникли – возвращаемые значения типа писсимистической стратегии – т.е. чуть что сделали сразу проверяем, а не плохо ли всё, исключения – оптимистическая стратегия – делаем всё подряд без разбора и проверок, авось всё хорошо.

СМ>Наоборот, при кидании исключения мы никогда не пройдем мимо ошибок (если конечно catch(...) не использовать). И будем обрабатывать ошибку на том уровне, на которм надо, а в случае возрата, нам еще надо передать управление на другой уровень, если обработка идет там.


Полностью согласен, тем не менее не понимаю, к чему относится "Наоборот"...

R>>В принципе возникает такое ощущение, что исключения всё-таки немного быстрее (если не происходит ошибок). Соответственно если для какой-то функции вероятность провала более 1%, то надо использовать коды возврата, если менее 1%, то надо использовать исключения для повышения производительности. Да-да, вы не ослышались – для поднятия производительности надо использовать исключения.


СМ>1% это очень много. Изначально использовал исключения и не сомневался, в этом. В обработке ошибок производительность занимает далеко не первое место.


Да, 1% это много. Сервера зачастую обрабатывают тысячи, десятки тысяч, сотни тысяч... транзакций без ошибок.
Тем не менее такие данные мне лично помогут более точно ориентироваться. А именно — допустим на сетевой сервер поступают некие "заявки". Если заявки приходят из доверенного источника и по надежному каналу, то типа как ошибок в данных быть не должно (ну то есть они бывают допустим в 0.001%) тут однозначно можно использовать исключения при валидации заявки. Если же заявки приходят от недоверенных источников и статистика такая, что ошибки при валидации заявки бывают в 5% случаев — т.е. "шлют всякую фигню" образно выражаясь — можно подумать о возвращаемом значении при валидации — иначе обработка ошибок для некорректных заявок может снизить пропускную способность и для корректных заявок.


R>>Так же стоит отметить, что в msvc8 по сравнению с msvc71 резко снизилась стоимость кидания исключения. Но тут у них есть предел, т.к. исключения реализованы поверх SEH, значит кидание исключения всегда будет связано с переходом в ядро.


СМ>SEH для С++ с ядром не имеет ничего общего. Это всего лишь цепочка блоков. Вряд ли исключения изменились, возможно оптимизировали деструктор или вызовы его уменьшили. или FPO оптимизацию подняли.


Тут я возможно ступил, у меня почему-то подсознательно SEH ассоциировался с ядром — надо будет ещё продебажить... хотя вроде я там видел переход в ядро... ладно ещё уточню...



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.