為什麼使用多執行緒

2022-09-18 19:39:10 字數 1229 閱讀 4804

1.耗時的操作使用執行緒,提高應用程式響應

2.並行操作時使用執行緒,如c/s架構的伺服器端併發執行緒響應使用者的請求。

3.多cpu系統中,使用執行緒提高cpu利用率

4.改善程式結構。乙個既長又複雜的程序可以考慮分為多個執行緒,成為幾個獨立或半獨

立的執行部分,這樣的程式會利於理解和修改。

使用多執行緒的理由之一是和程序相比,它是一種非常花銷小,切換快,更"節儉"的多工操作方式。在linux系統下,啟動乙個新的程序必須分配給它獨立的位址空間,建立眾多的資料表來維護它的**段、堆疊段和資料段,這是一種"昂貴"的多工工作方式。而執行於乙個程序中的多個執行緒,它們彼此之間使用相同的位址空間,共享大部分資料,啟動乙個執行緒所花費的空間遠遠小於啟動乙個程序所花費的空間,而且,執行緒間彼此切換所需的時間也遠遠小於程序間切換所需要的時間。

使用多執行緒的理由之二是執行緒間方便的通訊機制。對不同程序來說,它們具有獨立的資料空間,要進行資料的傳遞只能通過通訊的方式進行,這種方式不僅費時,而且很不方便。執行緒則不然,由於同一程序下的執行緒之間共享資料空間,所以乙個執行緒的資料可以直接為其它執行緒所用,這不僅快捷,而且方便。當然,資料的共享也帶來其他一些問題,有的變數不能同時被兩個執行緒所修改,有的子程式中宣告為static的資料更有可能給多執行緒程式帶來災難性的打擊,這些正是編寫多執行緒程式時最需要注意的地方。

除了以上所說的優點外,不和程序比較,多執行緒程式作為一種多工、併發的工作方式,當然有以下的優點:

1) 提高應用程式響應。這對圖形介面的程式尤其有意義,當乙個操作耗時很長時,整個系統都會等待這個操作,此時程式不會響應鍵盤、滑鼠、選單的操作,而使用多執行緒技術,將耗時長的操作(time consuming)置於乙個新的執行緒,可以避免這種尷尬的情況。

2)使多cpu系統更加有效。作業系統會保證當執行緒數不大於cpu數目時,不同的執行緒執行於不同的cpu上。

3) 改善程式結構。乙個既長又複雜的程序可以考慮分為多個執行緒,成為幾個獨立或半獨立的執行部分,這樣的程式會利於理解和修改。 

service、httprequest以及.net remoting等跨程序的呼叫。

而執行緒的適用範圍則是那種需要長時間cpu運算的場合,例如耗時較長的圖形處理和演算法執行。但是往往由於使用執行緒程式設計的簡單和符合習慣,所以很多朋友往往會使用執行緒來執行耗時較長的i/o操作。這樣在只有少數幾個併發操作的時候還無傷大雅,如果需要處理大量的併發操作時就不合適了。

其他參考資料

為什麼要使用多執行緒

一 多執行緒的一些解釋 來至知乎 我覺得解釋的比較好,比較詳細,就給大家分享一下 1 單程序單執行緒 乙個人在一張桌子上吃菜 2 單程序多執行緒 多個人在同一張桌子上吃菜 3 多程序單執行緒 多個人每個人在自己的桌子上吃菜 多執行緒的問題就是多個人在同一張桌子上吃同一道菜時會發生爭搶,如果兩個人同時...

為什麼使用多執行緒 非同步操作

c 是一門支援多執行緒的語言,因此執行緒的使用也是比較常見的。由於執行緒的知識在win32程式設計的時候已經說得過多,所以在.net中很少介紹這部分 可能.net不覺得這部分是它所特有的 那麼執行緒相關的問題大致有如下四類 這篇文章只討論單執行緒 單執行緒與 ui執行緒這兩方面的問題 問題一,執行緒...

為什麼要用多執行緒

以前我認為多執行緒的作用就是提公升效能。實際上,多執行緒並不一定能提公升效能 甚至還會降低效能 多執行緒也不只是為了提公升效能。多執行緒主要有以下的應用場景 1 避免阻塞 非同步呼叫 單個執行緒中的程式,是順序執行的。如果前面的操作發生了阻塞,那麼就會影響到後面的操作。這時候可以採用多執行緒,我感覺...