什麽是多線程?
多線程是為了使得多個線程並行的工作以完成多項任務,以提高系統的效率。線程是在同壹時間需要完成多項任務的時候被實現的。
使用線程的好處有以下幾點:
·使用線程可以把占據長時間的程序中的任務放到後臺去處理
·用戶界面可以更加吸引人,這樣比如用戶點擊了壹個按鈕去觸發某些事件的處理,可以彈出壹個進度條來顯示處理的進度
·程序的運行速度可能加快
·在壹些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了。在這種情況下我們可以釋放壹些珍貴的資源如內存占用等等。
還有其他很多使用多線程的好處,這裏就不壹壹說明了。
壹些線程模型的背景
我們可以重點討論壹下在Win32環境中常用的壹些模型。
·單線程模型
在這種線程模型中,壹個進程中只能有壹個線程,剩下的進程必須等待當前的線程執行完。這種模型的缺點在於系統完成壹個很小的任務都必須占用很長的時間。
·塊線程模型(單線程多塊模型STA)
這種模型裏,壹個程序裏可能會包含多個執行的線程。在這裏,每個線程被分為進程裏壹個單獨的塊。每個進程可以含有多個塊,可以***享多個塊中的數據。程序規定了每個塊中線程的執行時間。所有的請求通過Windows消息隊列進行串行化,這樣保證了每個時刻只能訪問壹個塊,因而只有壹個單獨的進程可以在某壹個時刻得到執行。這種模型比單線程模型的好處在於,可以響應同壹時刻的多個用戶請求的任務而不只是單個用戶請求。但它的性能還不是很好,因為它使用了串行化的線程模型,任務是壹個接壹個得到執行的。
·多線程塊模型(自由線程塊模型)
多線程塊模型(MTA)在每個進程裏只有壹個塊而不是多個塊。這單個塊控制著多個線程而不是單個線程。這裏不需要消息隊列,因為所有的線程都是相同的塊的壹個部分,並且可以***享。這樣的程序比單線程模型和STA的執行速度都要塊,因為降低了系統的負載,因而可以優化來減少系統idle的時間。這些應用程序壹般比較復雜,因為程序員必須提供線程同步以保證線程不會並發的請求相同的資源,因而導致競爭情況的發生。這裏有必要提供壹個鎖機制。但是這樣也許會導致系統死鎖的發生。