C#多線程進修之(一)多線程的相干概念剖析。本站提示廣大學習愛好者:(C#多線程進修之(一)多線程的相干概念剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#多線程進修之(一)多線程的相干概念剖析正文
本文具體剖析了C#多線程進修之多線程的相干概念。分享給年夜家供年夜家參考。詳細剖析以下:
甚麼是過程?
當一個法式開端運轉時,它就是一個過程,過程包含運轉中的法式和法式所應用到的內存和體系資本。
而一個過程又是由多個線程所構成的。
甚麼是線程?
線程是法式中的一個履行流,每一個線程都有本身的專有存放器(棧指針、法式計數器等),但代碼區是同享的,即分歧的線程可以履行異樣的函數。
甚麼是多線程?
多線程是指法式中包括多個履行流,即在一個法式中可以同時運轉多個分歧的線程來履行分歧的義務,也就是說許可單個法式創立多個並行履行的線程來完成各自的義務。
多線程的利益:
可以進步CPU的應用率。在多線程法式中,一個線程必需期待的時刻,CPU可以運轉其它的線程而不是期待,如許就年夜年夜進步了法式的效力。
多線程的晦氣方面:
線程也是法式,所以線程須要占用內存,線程越多占用內存也越多;
多線程須要調和和治理,所以須要CPU時光跟蹤線程;
線程之間對同享資本的拜訪會互相影響,必需處理競用同享資本的成績;
線程太多會招致掌握太龐雜,終究能夠形成許多Bug;
接上去將對C#編程中的多線程機制停止商量。為了省去創立GUI那些繁瑣的步調,更清楚地切近親近線程的實質,接上去的一切法式都是掌握台法式,法式最初的Console.ReadLine()是為了使法式半途停上去,以便看清晰履行進程中的輸入。
任何法式在履行時,至多有一個主線程。
一個直不雅印象的線程示例:
//SystemThread.cs
using System;
using System.Threading;
namespace ThreadTest
{
class RunIt
{
[STAThread]
static void Main(string[] args)
{
Thread.CurrentThread.Name="System Thread";
//給以後線程起名為"System Thread"
Console.WriteLine(Thread.CurrentThread.Name+"'Status:"+Thread.CurrentThread.ThreadState);
Console.ReadLine();
}
}
}
輸入以下:
System Thread's Status:Running
在這裡,我們經由過程Thread類的靜態屬性CurrentThread獲得了以後履行的線程,對其Name屬性賦值“System Thread”,最初還輸入了它確當前狀況(ThreadState)。
所謂靜態屬性,就是這個類一切對象所私有的屬性,不論你創立了若干個這個類的實例,然則類的靜態屬性在內存中只要一個。很輕易懂得CurrentThread為何是靜態的——固然有多個線程同時存在,然則在某一個時辰,CPU只能履行個中一個。
在法式的頭部,我們應用了以下定名空間:
using System; using System.Threading;
在.net framework class library中,一切與多線程機制運用相干的類都是放在System.Threading定名空間中的。假如你想在你的運用法式中應用多線程,就必需包括這個類。
我們經由過程個中供給的Thread類來創立和掌握線程,ThreadPool類用於治理線程池等。
(另外還供給處理了線程履行支配,逝世鎖,線程間通信等現實成績的機制。)
Thread類有幾個相當主要的辦法,描寫以下:
Start():啟動線程;
Sleep(int):靜態辦法,暫就緒前哨程指定的毫秒數;
Abort():平日應用該辦法來終止一個線程;
Suspend():該辦法其實不終止未完成的線程,它僅僅掛起線程,今後還可恢復;
Resume():恢復被Suspend()辦法掛起的線程的履行;
願望本文所述對年夜家的C#法式設計有所贊助。