Ускорили функцию в десять раз, а сервис быстрее не стал
Профилирование обработки потока кадров дало такую картину распределения времени:
wait_for_io 78%
parse_frame 4%
crc_check 3%
прочее 15%
Разработчик переписал crc_check на табличный алгоритм и ускорил саму функцию примерно в 10 раз. Общее время обработки почти не изменилось.
Как правильно объяснить результат?
- Общее время должно было упасть примерно в 10 раз, раз функция ускорена в 10 раз, — значит замер выполнен неверно
- Доля crc_check была 3%, поэтому даже полное её устранение дало бы не больше 3% выигрыша — результат ожидаем
- Табличный CRC сам по себе медленнее из-за промахов кеша при обращении к таблице, поэтому выигрыш съеден
- Профилировщик не учитывает время, проведённое в пользовательском коде, поэтому его показаниям нельзя доверять
