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