[python] asynchronni programovani, stavovy stroj

superman feed na centrum.cz
Sobota Srpen 2 14:02:06 CEST 2008


>
> 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






Další informace o konferenci Python