基于.NET的多線程編程入門
2007/1/27 8:35:48
多線程在構建大型系統的時候是需要重點關注的一個重要方面,特別是在效率(系統跑得多快?)和性能(系統工作正常?)之間做一個權衡的時候。恰當的使用多線程可以極大的提高系統性能。

  什么是線程?

  每個正在系統上運行的程序都是一個進程。每個進程包含一到多個線程。進程也可能是整個程序或者是部分程序的動態執行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執行。也可以把它理解為代碼運行的上下文。所以線程基本上是輕量級的進程,它負責在單個程序里執行多任務。通常由操作系統負責多個線程的調度和執行。

  什么是多線程?

  多線程是為了使得多個線程并行的工作以完成多項任務,以提高系統的效率。線程是在同一時間需要完成多項任務的時候被實現的。

  使用線程的好處有以下幾點:

  ·使用線程可以把占據長時間的程序中的任務放到后臺去處理

  ·用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度

  ·程序的運行速度可能加快

  ·在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較游泳了。在這種情況下我們可以釋放一些珍貴的資源如內存占用等等。

  還有其他很多使用多線程的好處,這里就不一一說明了。

  一些線程模型的背景

  我們可以重點討論一下在Win32環境中常用的一些模型。

  ·單線程模型

  在這種線程模型中,一個進程中只能有一個線程,剩下的進程必須等待當前的線程執行完。這種模型的缺點在于系統完成一個很小的任務都必須占用很長的時間。

  ·塊線程模型(單線程多塊模型STA)

  這種模型里,一個程序里可能會包含多個執行的線程。在這里,每個線程被分為進程里一個單獨的塊。每個進程可以含有多個塊,可以共享多個塊中的數據。程序規定了每個塊中線程的執行時間。所有的請求通過Windows消息隊列進行串行化,這樣保證了每個時刻只能訪問一個塊,因而只有一個單獨的進程可以在某一個時刻得到執行。這種模型比單線程模型的好處在于,可以響應同一時刻的多個用戶請求的任務而不只是單個用戶請求。但它的性能還不是很好,因為它使用了串行化的線程模型,任務是一個接一個得到執行的。

  ·多線程塊模型(自由線程塊模型)

  多線程塊模型(MTA)在每個進程里只有一個塊而不是多個塊。這單個塊控制著多個線程而不是單個線程。這里不需要消息隊列,因為所有的線程都是相同的塊的一個部分,并且可以共享。這樣的程序比單線程模型和STA的執行速度都要塊,因為降低了系統的負載,因而可以優化來減少系統idle的時間。這些應用程序一般比較復雜,因為程序員必須提供線程同步以保證線程不會并發的請求相同的資源,因而導致競爭情況的發生。這里有必要提供一個鎖機制。但是這樣也許會導致系統死鎖的發生。

  多線程在.NET里如何工作?

  在本質上和結構來說,.NET是一個多線程的環境。有兩種主要的多線程方法是.NET所提倡的:使用ThreadStart來開始你自己的進程,直接的(使用ThreadPool.QueueUserWorkItem)或者間接的(比如Stream.BeginRead,或者調用BeginInvoke)使用ThreadPool類。一般來說,你可以"手動"為長時間運行的任務創建一個新的線程,另外對于短時間運行的任務尤其是經常需要開始的那些,進程池是一個非常好的選擇。進程池可以同時運行多個任務,還可以使用框架類。對于資源緊缺需要進行同步的情況來說,它可以限制某一時刻只允許一個線程訪問資源。這種情況可以視為給線程實現了鎖機制。線程的基類是System.Threading。所有線程通過CLI來進行管理。

  ·創建線程:

  創建一個新的Thread對象的實例。Thread的構造函數接

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 无码精品一区二区三区免费视频| 激情五月婷婷网| 国产成人精品久久综合| 99re精彩视频| 尤物193yw在线看| 久久久亚洲欧洲日产国码aⅴ| 欧美zooz人禽交免费观看| 亚洲精品456人成在线| 精品亚洲成a人片在线观看| 国产三级精品三级在专区中文| 欧美色图亚洲激情| 国产精品第一页爽爽影院| a毛片免费播放全部完整| 成人中文字幕一区二区三区| 久久人人爽人人爽人人片dvd| 末成年ASS浓精PICS| 亚洲成A人片在线观看无码3D| 狠狠精品干练久久久无码中文字幕| 午夜爽爽爽男女污污污网站| 草莓视频国产在线观看| 国产成a人片在线观看视频下载| 2020国产精品永久在线| 在线观看二区三区午夜| xvdeviosbbc黑人| 成人免费v片在线观看| 久久99国产精品一区二区| 日韩午夜中文字幕电影| 亚洲av成人综合网| 欧美性a欧美在线| 亚洲欧美一区二区三区二厂| 狠狠入ady亚洲精品| 免费无码又爽又黄又刺激网站 | 拍拍拍无挡免费视频网站| 久久精品a亚洲国产v高清不卡| 欧美xxxxx高潮喷水| 亚洲国产片在线观看| 欧美日韩色综合网站| 亚洲热妇无码av在线播放| 激情内射日本一区二区三区 | 337p日本欧洲亚洲大胆精品555588 | 亚洲伊人久久大香线蕉综合图片|