Uff, už mi choděj Downloadery i ve vláknech Fronteru.
Cca 16 hodin práce, mezitym sem byl na chvilku 2x u Tety a několik hodin spal.
Takže si budu moct spustit Downloadery jednak jako samostatné procesy, jednak ve vláknech Fronteru a vybrat rychlejší variantu.
Problém je, že pokavad spustim jednu metodu ve vláknech programu víckrát, tak tyhle metody sdílej proměnný, takže vznikne paralelní guláš.
Je nutný tou metodu (i s její třídou) v programu n-krát zduplikovat a přejmenovat (Downloader001, Downloader002...).
Uf, podruhé, tak sem dodělal to spouštění Downloaderů ve vláknech Fronteru bez duplikací Downloaderů ve zdrojovém kódu.
Oříšek byl, že v Downloaderu mám hodně metod a stejně jako v dalších programech používám globální proměnné (je to daleko jednodušší než předávání hodnot přes parametry nebo objekty). Ale tyto globální proměnné pro každý Downloader samozřejmě nesmějí sdílet ani Fronter, ani jednotlivá vlákna Downloaderů vzájemně.
Trvalo mi to 24 hodin, jako obvykle skoro v kuse.
Ušel sem 4 slepá uličky, které nefachčily:
- ThreadStatic nefunguje pro pole
- ThreadLocal vyžaduje zvlášní způsob deklarací (a mám dojem, že taky moc nefunguje)
- vytvoření nové instance třídy s globálními parametry Downloaderu ve Fronteru a předávání této instance Downloaderům přes parametr (tohle by možná chodilo, ale už to mám hotový, tak se k temu nebudu vracet)
- vytvoření nové instance třídy s globálními parametry Downloaderu až v Downloaderu
Správné ulice byly tyto:
- vytvoření nové instance třídy s globálními parametry Downloaderu ve Fronteru a předání přes proměnnou Downloaderu
- zkopírování třídy globálních proměnných přímo do Downloaderu a použítí .this v programu a metodách Downloaderu
Děkuji konzultantům za rady.
PS1
Teďky můžu pokračovat v optimalizaci paměti a časů.
PS2
Takže si budu moci vyzkušet, zda mají jet Downloadery jako samostatné procesy, nebo ve vláknech Fronteru a zvolit rychlejší variantu.
Nikterakvět. Jak si můžete pofšinout, na prvním místě je Báječná Lednice, tedy Lednice s velkym L:
http://www.milionovastranka.net/examples/vysledky_hledani_linux.htm
Přiznávám, že hlavním účelem Nového hlodača je, aby tato stránka byla první při každém hlodání....