Trådar och trådar
Med multitrådning kan du öka programmets svarstider och öka dess dataflöde om programmet körs på ett system med flera processorer eller flera kärnor.
Processer och trådar
En process är ett körprogram. Ett operativsystem använder processer för att separera de program som körs. En tråd är den grundläggande enhet som ett operativsystem allokerar processortid till. Varje tråd har en schemaläggningsprioritet och upprätthåller en uppsättning strukturer som systemet använder för att spara trådkontexten när trådens körning pausas. Trådkontexten innehåller all information som tråden behöver för att sömlöst återuppta körningen, inklusive trådens uppsättning cpu-register och stack. Flera trådar kan köras i kontexten för en process. Alla trådar i en process delar dess virtuella adressutrymme. En tråd kan köra valfri del av programkoden, inklusive delar som för närvarande körs av en annan tråd.
Kommentar
.NET Framework är ett sätt att isolera program i en process med användning av programdomäner. (Programdomäner är inte tillgängliga på .NET Core.) Mer information finns i avsnittet Programdomäner och trådar i artikeln Programdomäner .
Som standard startas ett .NET-program med en enda tråd, ofta kallad den primära tråden. Den kan dock skapa ytterligare trådar för att köra kod parallellt eller samtidigt med den primära tråden. Dessa trådar kallas ofta för arbetstrådar .
När du ska använda flera trådar
Du använder flera trådar för att öka programmets svarstider och för att dra nytta av ett system med flera processorer eller flera kärnor för att öka programmets dataflöde.
Överväg ett skrivbordsprogram där den primära tråden ansvarar för användargränssnittselement och svarar på användaråtgärder. Använd arbetstrådar för att utföra tidskrävande åtgärder som annars skulle uppta den primära tråden och göra användargränssnittet icke-dynamiskt. Du kan också använda en dedikerad tråd för nätverks- eller enhetskommunikation för att vara mer lyhörd för inkommande meddelanden eller händelser.
Om programmet utför åtgärder som kan utföras parallellt kan den totala körningstiden minskas genom att utföra dessa åtgärder i separata trådar och köra programmet på ett system med flera processorer eller flera kärnor. I ett sådant system kan användningen av multitrådning öka dataflödet tillsammans med den ökade svarstiden.
Så här använder du multitrådning i .NET
Från och med .NET Framework 4 är det rekommenderade sättet att använda multitrådning att använda Task Parallel Library (TPL) och Parallel LINQ (PLINQ). Mer information finns i Parallell programmering.
Både TPL och PLINQ förlitar sig på trådarna ThreadPool . Klassen System.Threading.ThreadPool tillhandahåller ett .NET-program med en pool med arbetstrådar. Du kan också använda trådpooltrådar. Mer information finns i Den hanterade trådpoolen.
Du kan äntligen använda klassen System.Threading.Thread som representerar en hanterad tråd. Mer information finns i Använda trådar och trådar.
Flera trådar kan behöva komma åt en delad resurs. För att hålla resursen i ett okkorrupt tillstånd och undvika konkurrensvillkor måste du synkronisera trådåtkomsten till den. Du kanske också vill samordna interaktionen mellan flera trådar. .NET innehåller en mängd olika typer som du kan använda för att synkronisera åtkomst till en delad resurs eller samordna trådinteraktion. Mer information finns i Översikt över synkroniseringsprimitiver.
Hantera undantag i trådar. Ohanterade undantag i trådar avslutar vanligtvis processen. Mer information finns i Undantag i hanterade trådar.