Bug #381
closedDoba běhu přijímacího klienta roste s kvadrátem počtu přijaých eventů
0%
Description
Navrhuji vybrat všechny přijaté eventy z deserializovaného stromu najednou:
@response_list = $response->valueof('/Envelope/Body/getNewEventsResponse/event/');
Files
Updated by Pavel Kácha almost 13 years ago
- File get_whole_list.diff get_whole_list.diff added
Připojuji diff z upravené verze Víta Slámy.
Updated by Pavel Kácha almost 13 years ago
- Priority changed from High to Normal
Ještě průvodní dopis od VS, ať jsou informace na jednom místě:
Zdravím,
mám to!
Snížil jsem obsah .id souboru o 10000 a následující getNewEvents trval 3 a půl hodiny. Podle kontrolních výpisů klient celou tu dobu zpracovával přijatá data a konzumoval 100% času jednoho procesoru. Problém je v opakovaném vlání funkce
$response->valueof("[$i]")
To totiž znamená opakovaný průchod stromem, když hledaný uzel se nachází vždy dál od začátku než předchozí. Jinými slovy: Doba zpracování cyklu roste s kvadrátem počtu přijatých eventů.
Myslím, že je nasnadě, k čemu tehdy došlo. Warden server měl výpadek, asi tak den. Po restartu odesílací klienti nahrnuli na server nahromaděné eventy a můj přijímací klient už je nebyl schopen přijmout za rozumnou dobu. Když už měl odpracováno přes 10 hodin strojového času, usoudil jsem, že někde cyklí a killnul jsem ho.
Funkce SOAP::SOM::valueof vrací v seznamovém kontexu všechny hledané uzly do pole, takže ji stačí zavolat jen jednou. V příloze je upravená verze přijímacího klienta, která dokáže zpracovat těch 10000 přijatých eventů za 2 vteřiny.
Programování je někdy věda...
V. Sláma
Updated by Tomáš Plesník almost 13 years ago
- Status changed from New to Closed
Vyborna prace, vse jsem jiz zapracoval a nahral do GITu - 2d9b313e. Opravena verze bude vydana v novem balicku warden klienta. Jeste jednou moc dekuji za pomoc. Ticket uzaviram.