Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Existuje mnoho aplikací, které vytvářejí vlákna, které tráví velkou část času ve stavu spánku čekáním na výskyt události. Ostatní vlákna mohou přejít do spánkového stavu a pravidelně se probouzet, aby zkontrolovala změny nebo aktualizovala informace o stavu. sdružování vláken umožňuje efektivněji používat vlákna tím, že aplikaci poskytne fond pracovních vláken spravovaných systémem. Alespoň jedno vlákno monitoruje stav všech čekajících operací zařazených do fondu vláken. Po dokončení operace čekání spustí pracovní vlákno z fondu vláken odpovídající funkci zpětného volání.
Toto téma popisuje původní rozhraní API fondu vláken. Rozhraní API fondu vláken zavedené v systému Windows Vista je jednodušší, spolehlivější, má lepší výkon a poskytuje vývojářům větší flexibilitu. Informace o aktuálním rozhraní API fondu vláken naleznete v tématu fondy vláken.
Do fronty fondu vláken můžete také zařadit pracovní položky, které nesouvisejí s operací čekání. Pokud chcete požádat o zpracování pracovní položky vláknem ve fondu vláken, zavolejte funkci QueueUserWorkItem. Tato funkce přebírá parametr funkce, která bude volána vláknem vybraným z fondu vláken. Po zařazení pracovní položky do fronty neexistuje způsob, jak ji zrušit.
časovače fronty a registrované operace čekání také používají fond vláken. Jejich funkce zpětného volání jsou zařazeny do fronty fondu vláken. Můžete také použít funkci BindIoCompletionCallback ke zveřejnění asynchronních vstupně-výstupních operací. Po dokončení vstupně-výstupních operací se zpětné volání provede vláknem fondu vláken.
Fond vláken se vytvoří při prvním volání QueueUserWorkItem nebo BindIoCompletionCallback, nebo když časovač fronty nebo registrovaná operace čekání zařadí do fronty funkci zpětného volání. Ve výchozím nastavení je počet vláken, která lze vytvořit ve fondu vláken, přibližně 500. Každé vlákno používá výchozí velikost zásobníku a spouští se s výchozí prioritou.
Ve fondu vláken existují dva typy pracovních vláken: vstupně-výstupní a nevstupně-výstupní. Vlákno vstupně-výstupních operací je vlákno, které čeká ve stavu výstrahovatelného čekání. Pracovní položky jsou zařazeny do fronty vláken vstupně-výstupních operací jako asynchronní volání procedury (APC). Pracovní položku byste měli zařadit do fronty podprocesu pro I/O operace, pokud má být spuštěna ve vlákně, které čeká ve stavově výstrahy.
Pracovní vlákno mimo vstupně-výstupní operace čeká na porty pro dokončení vstupně-výstupních operací. Použití pracovních vláken bez vstupně-výstupních operací je efektivnější než použití vstupně-výstupních vláken. Proto byste měli použít jiná než V/V pracovní vlákna, kdykoli je to možné. Pokud existují čekající asynchronní I/O požadavky, neukončí se jak I/O pracovní vlákna, tak i vlákna, která nejsou pro I/O operace. Oba typy vláken mohou být použity pracovními položkami, které zahajují asynchronní žádosti o dokončení vstupně-výstupních operací. Vyhněte se však publikování asynchronních požadavků na dokončení vstupně-výstupních operací v pracovních vláknech mimo vstupně-výstupní operace, pokud by jejich dokončení mohlo trvat dlouhou dobu.
Pokud chcete použít sdružování vláken, pracovní položky a všechny funkce, které volají, musí být bezpečné pro fond vláken. Bezpečná funkce nepředpokládá, že vlákno, které ho spouští, je vyhrazené nebo trvalé vlákno. Obecně byste se měli vyhnout použití místního úložiště vlákna nebo provedení asynchronního volání, které vyžaduje trvalé vlákno, například funkce RegNotifyChangeKeyValue. Tyto funkce se ale dají volat ve vyhrazeném vlákně (vytvořeném aplikací) nebo ve frontě do trvalého pracovního vlákna (pomocí QueueUserWorkItem s možností WT_EXECUTEINPERSISTENTTHREAD).
Související témata