Lidi co si o tom myslite, dostal jsem za ukol do existujici implementace databazove aplikace, ktera umi mimojine cist data do R-stromu, udelat paralelismus pro vkladani a dotazovani na ten R-strom. Vyvijelo to par ucitelu databazistu z katedry informatiky. Nedari se mi to tim paralelismem poradne zrychlit a ted jsem tak premyslel nad tim, jak bych to cele napsal ja a trochu se divim.
Kdyz chci implementovat R-strom, tak to jako jakykoliv jiny strom funguje tak, ze znam vlastne jen korenovy prvek toho stromu. Ten obsahuje odkazy na potomky. Takto tim stromem prochazim. Nikde by tam nemelo dochazet k zadne kolizi a nemusim v prubehu mechanizmu iterace pouzivat zadne kriticke sekce, kdyz je to dobře (resp. normálně) udělané.
Ale v tomhle pripade to tak neni. nechapu proc, ale vsechny uzly stromu spravuje jedina sdilena trida - jakasi cache pro uzly. Kdyz se pozaduje nejaky uzel, musi se k nemu pres tuhle tridu. Tu jsem musel celou osetrit kritickyma sekcema. A to neni vsechno. Aplikace si zaznamenava do sdilene tridy taky ruzne statistiky a to vse V PRUBEHU ITERACE STROMU (takze dalsi kriticke sekce) mimoto pouziva taky sdileny MemoryPool, ktery krome toho ze nefunguje moc dobre, musi byt zase osetreny kritickyma sekcema takze soubeh zase zhorsuje. Cela aplikace je dost slozita na to, abych ji mohl/chtel pochopit a menit mechanismus jak funguje, protoze bych to musel cele prekopat.
Vysledek je, ze ve vice vlaknech jsou dotazy na prvky v R-stromu rychlejsi cca jen o 10-30% (na serverovem procesoru co ma 20 jader), vic se to nehne, protoze se to porad blokuje.
Mam trochu obavy z toho, co rekne ucitel na to, ze to je o tak malo rychlejsi. Ale zase si rikam, ze kdyz to maji takhle napsane, tak pro prece nemuzou nic vic cekat
Co si myslite?