Úvod:
Asynchronní programování se stalo populárním trendem ve vývoji moderního softwaru. Dvě běžně používané techniky pro asynchronní programování v C# jsou Úkoly a Vlákna . Mnoho vývojářů je však zmateno rozdíly mezi nimi Úkoly a Vlákna a kdy je použít. V tomto článku uvidíme rozdíly mezi nimi Úkoly a Vlákna v C# a poskytnout pokyny, kdy je použít.
Co jsou úkoly?
V C# je úloha abstrakcí vyšší úrovně pro asynchronní spouštění kódu. Úloha označuje jednotku práce, která musí být provedena asynchronně, a může nebo nemusí vrátit hodnotu. Úkol je obvykle vytvořen pomocí Úkolová třída Factory , který poskytuje několik metod pro vytváření a provádění úloh.
Úkoly používají a Bazén nití vykonávat svou práci, což znamená, že úkoly jsou prováděny na jednom z vláken v Bazén nití. Když je úkol vytvořen, je přidán do Fronta fondu vláken a jedno z vláken ve fondu se používá k provedení úlohy. Jakmile je úloha dokončena, vlákno se vrátí do fondu, připravené k použití pro další úlohu.
Úkoly mají oproti vláknům několik výhod:
- Úkoly jsou lehčí než vlákna. Úlohy využívají méně systémových prostředků, jako je paměť a čas CPU, než vlákna.
- Úkoly se spravují snadněji než vlákna. Úlohy poskytují vyšší úroveň abstrakce pro asynchronní programování, což usnadňuje psaní a údržbu kódu.
- Úkoly také mohou v určitých situacích poskytovat lepší výkon než vlákna. Je to proto, že Úkoly používají a Bazén nití , která dokáže spravovat vlákna efektivněji než vytváření a ničení vláken pro každou jednotku práce.
Co jsou vlákna?
V C# je vlákno abstrakce nižší úrovně pro asynchronní spouštění kódu. Vlákno představuje konstrukci na úrovni operačního systému, která se používá k asynchronnímu provádění kódu. Vlákno může nebo nemusí vrátit hodnotu a obvykle je vytvořeno pomocí Třída nití .
Vlákna využívají své vlastní zdroje, jako je paměť a čas procesoru, a obvykle je vytváří a ničí explicitně vývojář. Když je vlákno vytvořeno, začne se okamžitě provádět a pokračuje v provádění, dokud není výslovně zastaveno nebo nedokončí svou práci.
Vlákna mají ve srovnání s Úkoly několik nevýhod:
- Vlákna jsou těžší než Úkoly. Vlákna využívají více systémových prostředků, jako je paměť a čas CPU, ve srovnání s Úkoly.
- Vlákna se spravují hůře než Úkoly. Vlákna vyžadují více nízkoúrovňového programování a synchronizace, což ztěžuje psaní a údržbu kódu.
- Vlákna také mohou v určitých situacích poskytovat horší výkon než Úkoly. Je to proto, že vytváření a ničení vláken pro každou jednotku práce může být neefektivní, zvláště když je potřeba provést mnoho jednotek práce.
Kdy použít úkoly:
Úlohy se doporučují, když chcete provádět jednotku práce asynchronně a nepotřebujete jemnou kontrolu nad prováděním. Úlohy jsou ideální pro provádění malých a krátkodobých jednotek práce, jako jsou I/O operace nebo jednoduché výpočty.
Úkoly se také doporučují, když chcete využít výhod a Bazén nití . A Bazén nití může spravovat vlákna efektivněji než vytváření a ničení vláken pro každou jednotku práce. To může vést k lepšímu výkonu, zvláště když je potřeba provést mnoho jednotek práce.
Úlohy jsou také užitečné, když chcete řetězit asynchronní operace. Úlohy lze kombinovat pomocí operátoru wait a vytvořit tak řetězec asynchronních operací, které se provádějí jedna po druhé. To může být důležité, když chcete provést řadu závislých asynchronních operací.
Kdy použít vlákna:
Vlákna v C# by se měla používat, když potřebujete jemnou kontrolu nad prováděním a když máte specifické požadavky, které nelze splnit pomocí abstrakcí vyšší úrovně poskytovaných Úkoly. Zde je několik situací, kdy mohou být vlákna lepší volbou:
Pracovní jednotky s dlouhou životností:
Vlákna jsou vhodnější pro dlouhodobé jednotky práce, jako jsou služby na pozadí nebo složité výpočty, které vyžadují větší kontrolu nad prováděním. V takových případech je často nutné řídit provádění kódu jemnějším způsobem, než jaký poskytují Úkoly.
Jemná kontrola nad prováděním závitu:
Vlákna umožňují nastavit Priority vláken, synchronizace vláken , a Vlákno se přeruší . Pokud potřebujete přizpůsobit způsob provádění kódu, vlákna poskytují nízkoúrovňové rozhraní, které vám to umožňuje.
Nízkoúrovňové programování:
css pozadí
Vlákna vyžadují více nízkoúrovňového programování a synchronizace, což může být užitečné, pokud máte specializované požadavky, které nelze splnit pomocí abstrakcí vyšší úrovně poskytovaných Úkoly.
Interoperabilita s nespravovaným kódem:
Pokud potřebujete spolupracovat s nespravovaným kódem, mohou být vlákna jedinou možností. V takových případech možná budete muset vytvořit a ovládat vlákna ručně, abyste zajistili, že váš kód bude správně fungovat s nespravovaným kódem.
Výkonnostní aspekty:
V některých situacích může být vytváření a ničení vláken pro každou jednotku práce neefektivní, zvláště když je potřeba provést mnoho jednotek práce. V takových případech může být použití vláken lepší volbou, protože je lze znovu použít pro více jednotek práce.