Tech Life

Ilustrační obrázek

Více než stoprocentní?

19. 08. 2008 00:00    kategorie: Tech Life    autor: MKa    komentářů: 3

Náhodou jsem narazil na kus kódu, který může víceméně bez úprav sloužit jako další díl JAVA kvízu. Cílem kódu je měřit průběžnou úspěšnost cachovacího mechanismu. S tím, že starší data jsou postupně “zapomínána”, konkrétně se jejich váha čas od času snižuje vždy dělením dvěma.
 

Čas od času došlo k tomu, že počet neúspěšných pokusů překročil počet “zásahů”. Tedy do logu se vypsalo něco jako: “Too many misses: 92/90

Neúspěch vyhledávání více než stoprocentní? Že to není možné? Vždyť když se přičítá MissCount, vždycky se přičte i RequestCount! Přesto se to opravdu stává. Poznáte proč?

Pro jistotu upozorňuji, že nešlo o klasické případy, které každého asi rychle napadnou: čítač rozhodně nepřetekl 31 bitů, period je dostatečně velké číslo, proměnné byly řádně vynulovány, jsou privátní a nikde jinde se k nim nepřistupuje. Otázka více vláken to také není, po dobu zpracování metody je použit globální zámek někde jinde.

Sdílet odkaz:
tisk

Diskuze k článku

Martin, 21.11.2008 11:57

Fajn, kdy bude další kvíz :-) ?

MKa, 21.11.2008 10:08

Jojo, přesně tak - hlavní problém je v tom, že jeden counter se přičítá před dělením a druhý až po něm.

Martin, 20.11.2008 18:54

Příčina je v celočíselném dělení, kdy se u dvou čísel int zahodí desetinná část, a v tom, že floatingMissCount++; je až po testu na překročení period. U příkladu s "Too many misses: 92/90" došlo díky několikrát zahození zbytku při dělení, že floatingRequestCount/=2; je 181/2=90 a floatingMissCount/=2; 182/2=91, pak se provedlo floatingMissCount++; cili floatingMissCount je 92. Je to zhruba nejak tak?

Přidat příspěvek

 

Kontakt pro média


Máte zájem o další informace, odborný článek či přednášku na konferenci? Kontaktujte nás prosím na pr@etnetera.cz.

RSS - Tech life


RSS kanál Tech Life Blogu

Offlineblog

Offlineblog

Ljama


Komix z prostředí imaginární firmy.

ljama

Ještě jste ho nečetli? Tak tudy ...

 
Doporučujeme: Nabídka práce, volná pracovní místa - pracovní portál SPRÁVNÝKROK.CZ