#8584: Ме-е-едленные методы

16:45 22.02.2012, IT happens


Смотрю код высоконагруженного сервера. В ядре обсчёта вижу код типа:


func() {

ObjectGame* OG=MainOG;

while(OG->next!=NULL)

{

ia=(int*)OG+12;

i=*ia;

/* что-то делает*/

*ia=i;

/* код функции, внутри функции ia претерпевает различные изменения*/

OG=OG->next;

}

}


С большими глазами иду к прогеру, который это всё написал. Спрашиваю: почему он не пользуется методами Set и Get, и вообще, почему именно 12 байт?


На что он мне отвечает: «Внутри кода функции есть ветвящийся цикл, в котором перебираются многие параметры объекта. Если пользоваться методами Set и Get, а это переход по адресу, причём у каждого объекта он свой, конвейер процессора офигеет и сбросится. Это плюс 30 тактов на каждый переход. Всего таких объектов в секунду надо обсчитать порядка нескольких миллионов. Частота ядра — три миллиарда операций в секунду. Отсюда вывод: идите вы лесом со своим ООП!»



Загрузка...