教程079多線程支持_第1頁
教程079多線程支持_第2頁
教程079多線程支持_第3頁
教程079多線程支持_第4頁
教程079多線程支持_第5頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、多線程開放分類: 程序、API線程?英文:Thread每個正在系統(tǒng)上運行的程序都是一個進程。每個進程包含一到多個線程。進程也可能是整個程序或者是部分程序的動態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執(zhí)行。也可以把它理解為代碼運行的上下文。所以線程基本上是輕量級的進程,它負責在單個程序里執(zhí)行多任務。通操作系統(tǒng)負責多個線程的調(diào)度和執(zhí)行。多線程?多線程是為了使得多個線程并行的工作以完成多項任務,以提高系統(tǒng)的效率。線程是在同一時間需要完成多項任務的時候被實現(xiàn)的。使用線程的好處有以下幾點:使用線程可以把占據(jù)長時間的程序中的任務放到去處理用戶界面可以更加吸引人,這樣比如用戶點擊了

2、一個按鈕去觸發(fā)某些事件的處理,可以彈出一個進度條來顯示處理的進度程序的運行速度可能加快在一些等待的任務實現(xiàn)上如用戶輸入、文件讀寫和網(wǎng)絡收發(fā)數(shù)據(jù)等,線程就比較有用了。在這種情況下可以一些珍貴的資源如內(nèi)存占用等等。還有其他很多使用多線程的好處,這里就不一一說明了。一些線程模型的背景可以重點一下在Win32 環(huán)境中常用的一些模型。單線程模型在這種線程模型中,一個進程中只能有一個線程,剩下的進程必須等待當前的線程執(zhí)行完。這種模型的缺點在于系統(tǒng)完成一個很小的任務都必須占用很長的時間。塊線程模型(單線程多塊模型STA)這種模型里,一個程序里可能會包含多個執(zhí)行的線程。在這里,每個線程被分為進程里一個單獨的塊

3、。每個進程可以含有多個塊,可以共享多個塊中的數(shù)據(jù)。程序規(guī)定了每個塊中線程的執(zhí)行時間。所有的請求通過Windows 消息隊列進行串行化,這樣保證了每個時刻只能一個塊,因而只有一個單獨的進程可以在某一個時刻得到執(zhí)行。這種模型比單線程模型的好處在于,可以響應同一時刻的多個用戶請求的任務而不只是單個用戶請求。但它的性能還不是很好,因為它使用了串行化的線程模型,任務是一個接一個得到執(zhí)行的。多線程塊模型(線程塊模型)多線程塊模型(MTA)在每個進程里只有一個塊而不是多個塊。這單個塊控制著多個線程而不是單個線程。這里不需要消息隊列,因為所有的線程都是相同的塊的一個部分,并且可以共享。這樣的程序比單線程模型和

4、STA 的執(zhí)行速度都要塊,因為降低了系統(tǒng)的負載,因而可以優(yōu)化來減少系統(tǒng) idle 的時間。這些應用程序一般比較復雜,因為程序員必須提供線程同步以保證線程不會并發(fā)的請求相同的資源,因而導致競爭情況的發(fā)生。這里有必要提供一個鎖機制。但是這樣也許會導致系統(tǒng)死鎖的發(fā)生。多線程在.NET 里如何工作?在本質(zhì)上和結(jié)構(gòu)來說,.NET 是一個多線程的環(huán)境。有兩種主要的多線程方法是.NET 所提倡的:使用ThreadStart 來開始你自己的進程,直接的(使用 ThreStream.BeginRead,或者調(diào)用BeginInvoke)使用 Threool.QueueUserWorkItem)或者間接的(比如oo

5、l 類。一般來說,你可以手動為長時間運行的任務創(chuàng)建一個新的線程,另外對于短時間運行的任務尤其是經(jīng)常需要開始的那些,進程池是一個非常好的選擇。進程池可以同時運行多個任務,還可以使用框架類。對于資源緊缺需要進行同步的情況來說,它可以限制某一時刻只允許一個線程資源。這種情況可以視為給線程實現(xiàn)了鎖機制。線程的基類是System.Threading。所有線程通過 CLI 來進行管理。創(chuàng)建線程:創(chuàng)建一個新的Thread 對象的實例。Thread 的構(gòu)造函數(shù)接受一個參數(shù):Thread DummyThread = new Thread( new ThreadStart(dummyFunction) );執(zhí)行線

6、程:使用Threading 命名空間里的start 方法來運行線程:DummyThread.Start ();組合線程:經(jīng)常會出現(xiàn)需要組合多個線程的情況,就是當某個線程需要其他線程的結(jié)束來完成自己的任務。假設DummyThread 必須等待DummyPriorityThread 來完成自己的任務,只需要這樣做:DummyPriorityThread.Join() ;暫停線程:使得線程暫停給定的秒DummyPriorityThread.Sleep();中止線程:如果需要中止線程可以使用如下的代碼:DummyPriorityThread.Abort();同步經(jīng)常我們會遇到需要在線程間進行同步的情況

7、,下面的代碼給出了一些方法:using System;using System.Threading;namespace SynchronizationThreadsExample class SynchronizationThreadsExampleprivate int counter = 0; static void Main( ) SynchronizationThreadsExample STE = new SynchronizationThreadsExample(); STE.ThreadFunction( );public void ThreadFunction ( ) Thre

8、ad DummyThread = new Thread( new ThreadStart(SomeFunction) ; DummyThread.IsBackground=true;DummyThread.Name = First Thread; DummyThread.Start( );Console.WriteLine(Started thread , DummyThread.Name);Thread DummyPriorityThread = new Thread( new ThreadStart(SomeFunction) ); DummyPriorityThread.IsBackgr

9、ound=true;DummyPriorityThread.Name = Second Thread; DummyPriorityThread.Start( );Console.WriteLine(Started thread , DummyPriorityThread.Name); DummyThread.Join( );DummyPriorityThread.Join( );public void SomeFunction( ) try while (counter 10) int tempCounter = counter; tempCounter +; Thread.Sleep(1);

10、counter = tempCounter;Console.WriteLine( Thread . SomeFunction: ,Thread.CurrentThread.Name, counter);catch (ThreadInterruptedException Ex) Console.WriteLine( Exception in thread , Thread.CurrentThread.Name);finally Console.WriteLine( Thread Exiting. ,Thread.CurrentThread.Name);使用InterlockC#提供了一個特殊的類叫做 interlocked,就是提供了鎖機制的實現(xiàn),我們可以加入如下的代碼實現(xiàn)鎖機制:Interlocked.SomeFunction (ref counter);使用鎖這是為了鎖定代碼關鍵區(qū)域以進行同步,鎖定代碼如下:lock (this) Some statements ;使用Monitor當有需要進行線程管理的時候我們可以使用:Monitor.Enter(this);其他也有一些方法進行管理,這里就不一一提及了。線程的缺點線程自然也有缺點,以下列出了一些:如果有大量的線程,會影響性能,因為操作系統(tǒng)需要在他們之間切換;更多的線程需要更多的內(nèi)存空間線程會給程序帶來

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論