loshia

blogs the world

Случаят с четирите байта

Преди няколко дена попаднах на тази история от блога на Windows Mobile Team. Много накратко, идеята е че техният екип бил разработил encryption layer, който да позволява данните, записани на картата, да бъдат кодирани без програмите да знаят за това, т.е. те си четат файловете нормално, а операционната система се грижи те да бъдат кодирани/разкодирани в реално време. Една единствена програма, разработена от друг екип, правила проблеми, в смисъл, че работила ужасно бавно. Започнало прехвърляне на топката за това кой е виновен. В крайна сметка причината била, че програмката четяла файловете на порции от по четири байта. За един файл с големина един мегабайт това са над 250000 четения от файл.

Това на което аз се чудя е следното. Как може цял един екип в Майкрософт, който е разработил въпросната програма, която на всичко отгоре била много сериозна и с много клиенти, да допусне такава грешка? Да прочетеш даден файл наведнъж, или поне на сегменти с достатъчно голяма големина, е обикновено с пъти по-бързо от това да го четеш байт по байт. При това с много пъти. И обикновено това се забелязва почти веднага, особено с по-големи файлове.

Може би причината е, че програмата е била писана за Windows Mobile 2003, където файловете всъщност са се държали в системната памет и четенето от файл е било съпоставимо с четене от паметта. Което пак не елиминира overhead-а от всички системни функции, които се викат за всяко едно четене. Може би затова всяка следваща версия на Windows е все по-бавна. Пише се все повече и повече код който да работи някак си. Ми тъй ами! За какво да се оптимизира дадена програма, като просто можем да си купим по-бърз процесор или повече памет?