C 如何運用多執行緒 5,C 中構建多執行緒應用程式

時間 2023-04-18 04:36:02

1樓:幻想武士

thread th1 = new thread(new threadstart(aa));執行緒1

thread th2 = new thread(new threadstart(aa));執行緒2

thread th3 = new thread(new threadstart(aa));執行緒3

;執行緒1啟動。

;執行緒2啟動。

;執行緒3啟動。

//你的方法。

public void aa()

c#中構建多執行緒應用程式

c#多執行緒程式設計例項

高手進~ c# 多執行緒處理

2樓:匿名使用者

非同步多執行緒記憶體釋放主要靠自己,c#的垃圾**機制是,只有當程式段執行完畢後,垃圾**機制才對程式開闢的記憶體進行垃圾**。而多執行緒內的程式,特別是客戶端連線,只要客戶端沒有斷開連線,你的執行緒就會繼續執行,除非斷開客戶端,執行緒的生命週期結束,垃圾**機制才會對該執行緒產生佔用的記憶體進行**。如果客戶端沒有斷開,你就要注意**程執行的過程中去清除垃圾。

一般記憶體不但增大大多數是迴圈建立引用記憶體造成的,所以要留意你執行緒中每一個引用型別的建立。至於釋放,一是**程結束讓系統自動**,二是手動**。但我建議你給你的資料儲存區指定大小。

你的資料儲存應該是這樣一個過程,資料儲存區一般接受底端資料,一邊釋放過期資料。例如建立的listdatas = new list(),控制你的最大條數是100條,那麼當》100時,就remove掉多餘的。

希望對你有幫助。

3樓:匿名使用者

.net的垃圾**是自動的,當機器的記憶體有壓力時會被自動觸發。而沒有人知道是什麼時候。

.net的開發人員不主張程式設計師自己使用進行垃圾**。

如果一定要使用,需要兩次;

第一次尋找可以被**的資源,並把他們放置到「準備好被**」的佇列了。

第二次施放這個「準備好被**」列隊裡的所有元素。

如果記憶體持續上升,可以使著看看自己的**有沒有造成記憶體洩露。

比如哪些有idisposable的類open以後沒有被close或者dispose,這是造成記憶體流失的原因之一。

socket類本身也implement了idisposable,所以使用的時候注意有沒有close()

或者用(using socket socket = new socket())

被包含在using語句中的部分。net會自動dispose,不會造成潛在記憶體流失。

另一個可能造成記憶體流失的原因是 事件綁有其他方法,但在不使用以後沒有取消邦定。

(不好意思,我表達的不是很好)

比如 loaded +=onloaded;

private void onloaded (object sender, routedeventargs e)

以下習慣也可以某種程度上的降低記憶體洩露。

loaded -=onloaded;

但不是所有事件繫結會造成記憶體洩露。

c#非同步和多執行緒有什麼區別和聯絡? 5

4樓:匿名使用者

非同步和多執行緒可以說沒有必然的聯絡,只能說非同步可以通過多執行緒實現而已。

要理解這些東西,你得具備很多相關的知識,作業系統原理,編譯原理等。

簡單地來說,計算機或者說cpu執行你的**都是順序執行的,當前的語句沒有執行完,不會執行後面的語句的,這是永遠不變的規則!

但是這樣的機制會使整個執行效率很低,因為cpu總是要等待當前的語句執行完畢了才會執行後面的**,而計算機在絕多數的時候都是處於等待使用者的輸入,等待磁碟檔案的讀取完成,等待網路資料的傳輸完成中,所以為了提高整個系統的執行效率,提高cpu的執行效率,計算機系統引入了非同步的機制。

非同步機制,簡單地說就是cpu不會傻傻地處於等待狀態,它會先幹別的事情,當它需要的東西已經準備完畢後(大多數的情況都是等待外部的輸入資料準備完畢,也有些是複雜的計算完畢),硬體系統給cpu一箇中斷,告訴有了新的資料了,你現在可以去處理了。

這就是最基本的非同步原理,而現代操作作業系統對硬體系統做了良好的封裝,把很多底層機制遮蔽了,為程式的開發者提供了事件和多執行緒的概念,讓程式的開發者可以更好地利用非同步機制。

再說說多執行緒吧。多執行緒是計算機引入了作業系統之後才有的概念,至於為什麼計算機要引入作業系統,在此就不敘述了,自行了解。多執行緒的實現有兩個方法,一個就是增加cpu的核數和個數,這是最直接的方法,還有一種是採用cpu輪詢的方式,每個程序都執行一段時間,又去執行另一個程序的指令,由於切換的速度非常的快,給人的感覺就是同時執行的。

說了這麼多,你可能很失望,因為沒有**,沒有舉例。但我想說的是,用**無法說明這個問題,不同的作業系統,不同的程式語言,不同的程式設計框架,對非同步和多執行緒的定義和處理是不一樣的,但原理就是這樣的。

我們寫**無非就是寫一堆的指令去要求cpu執行,同步的方式就是這樣的:

我:hi,cpu,我要你做一件事情,而且必須立刻馬上就做,因為我正在等著你。

cpu:那你就等著吧,我現在去做。

非同步的方式是這樣的:

我:hi,cpu,我要你做一件事情,但是不是立刻就做,你可以交給下面的人去做,或者找一個幫手來,我們繼續做後面的事情。

cpu:好的,我現在通知硬體去做,等有結果了我通過事件告訴你。

或者cpu:好的,我讓另一個核心來做這件事情,我們繼續(其實多執行緒是作業系統實現的,我只是這麼舉個例子而已)

c# 執行緒的定義

5樓:匿名使用者

就好比送一批貨物一樣:把貨物從a全部送到b是一個程序,在送貨的過程中每輛車送的過程是一個執行緒,就好像是程序說明了要做什麼事,執行緒就是完成做這件事的每個過程細節。

6樓:匿名使用者

程序是容器,執行緒是在容器裡面幹活的。不過。net裡面不是完全按照一般意義上的程序和執行緒,還有纖程的概念。

7樓:尼瑪放肆

執行緒是作業系統常規多工能力的一個組成部分並允許應用程式的一部分與其他物件的分別執行的一個特定物件。具體可以去這裡http://www.

看看,介紹的很好。

8樓:網友

程序就是將軍,執行緒就是士兵。在打戰這件事下,將軍只是指揮,士兵才是真正廝殺幹活的。

所以,一個程序中,至少會有一個執行緒,因為,光有人指揮不行,至少要有一個幹活的。

執行緒就是士兵,所以它的作用就是幹活,多個執行緒,就是可以同時幹多個活。比如,有的偵查,有的打架,有的做飯。如果只有一個執行緒,那就要按順序來做了,偵查完還要回來打架,打完還得做飯,這不得累死,肯定得輸。

所以,傳送一個檔案是一個程序這描述,實際上是錯的,我完全可以在一個將軍的指揮下,派10個士兵去傳送檔案。

不知道解釋的清楚嗎?

C 中構建多執行緒應用程式

高手進 c 多執行緒處理 非同步多執行緒記憶體釋放主要靠自己,c 的垃圾 機制是,只有當程式段執行完畢後,垃圾 機制才對程式開闢的記憶體進行垃圾 而多執行緒內的程式,特別是客戶端連線,只要客戶端沒有斷開連線,你的執行緒就會繼續執行,除非斷開客戶端,執行緒的生命週期結束,垃圾 機制才會對該執行緒產生佔用的記憶體進行 如果...

c 的執行緒和程序的區別,C 多執行緒多程序問題

執行緒是指程序內的一個執行單元,也是程序內的可排程實體.與程序的區別 1 地址空間 程序內的一個執行單元 程序至少有一個執行緒 它們共享程序的地址空間 而程序有自己獨立的地址空間 2 資源擁有 程序是資源分配和擁有的單位,同一個程序內的執行緒共享程序的資源 3 執行緒是處理器排程的基本單位,但程序不...

c 多執行緒加鎖的問題,C 執行緒中方法可以加鎖嗎?

lock是鎖住執行緒吧,用protect和final不給呼叫算不。恩,可以的。先定義lock物件。object objlock new object 在lock塊中呼叫一個函式。lock objlock 可以啊 放在lock塊裡。還有一種執行緒同步一系統的方法。比如用monitor mutex一系統...