多線程

多線程

計算機術語
多線程(multithreading)本身就是指從軟件或者硬件上實現多個線程并發執行的技術。[1]具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程,進而提升整體處理性能。具有這種能力的系統包括對稱多處理機、多核心處理器以及芯片級多處理或同時多線程處理器。在一個程序中,這些獨立運行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理” 。
    中文名:多線程 外文名:multithreading 所屬學科: 類型:編程 優點:提高資源使用效率來提高系統的效率 對象:計算機 含義:從軟件或者硬件上實現多個線程并發執行的技術

概念

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

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

線程和進程的區别在于,子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文.多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定. 線程的運行中需要使用計算機的内存資源和CPU。

好處

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

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

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

程序的運行速度可能加快

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

模型背景

單線程模型

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

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

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

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

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

缺點

如果有大量的線程,會影響性能,因為操作系統需要在他們之間切換;

更多的線程需要更多的内存空間

線程會給程序帶來更多的bug,因此要小心使用

線程的中止需要考慮其對程序運行的影響

通常塊模型數據是在多個線程間共享的,需要一個合适的鎖系統替換掉數據共享

相關詞條

相關搜索

其它詞條