> > A vas se ptam - prehlednul jsem neco, co by cely proces zjednodusilo, > doporucili byste mi neco jineho nebo mate zkusenosti s navrhem > asynchronnich procesu? >
Ano, přehlédnul. Tento problém se řeší velmi často, a je na něj krásné standardizované řešení. To řešení spočívá v tom, že se určí maximální počet běžících threadů - řekněme třeba 50. Pak se vytvoří tzv. thread pool, tedy objekt, který spustí 50 threadů a drží je v pozastaveném stavu. Všechny potřebné úkoly se řadí do fronty operací, které pak přebírá thread pool a přiřazuje jim jednotlivé thready. Tedy pokud je potřebných operací méně, než max. počet threadů, některé thready spí a zbylé vykonávají operace. Pokud je operací více, než threadů, pak všechny thready vykonávají operace až do max. počtu, tedy v tomto případě do 50 a zbylé čekají ve frontě. Jakmile jakákoli operace skončí, volný thread vybere z fronty další operaci a začne jí vykonávat. Tímto dosáhnete max. rychlosti a vysokého výkonu. Za prvé se zbavíte režie vytváření a rušení threadu - všech 50 threadů vytvoříte najednou a stále existují v thread poolu. Za druhé - příliš velký počet threadů naráz je neefektivní a režie operačního systémů při přepínání kontextu obrovského množství threadů sežere značnou část výkonu. Takže při rozumně zvoleném počtu threadů probíhají operace nejrychlejší možnou rychlostí - vyšší, než kdyby bylo threadů méně, nebo více. Za třetí - snažší synchronizace thread díky tomu, že je máte najednou pod kontrolou v jednom objektu - synchronizační akce bývají výrazně zjednodušeny. Psal bych víc, ale pro základní představu to stačí. Miloslav Ponkrác _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
