天天看點

2.多線程的優缺點

1.     和程序相比,它是一種非常"節儉"的多任務操作方式。對程序而言,建立一個新的程序必須配置設定給它獨立的位址空間,建立衆多的資料表來維護它的代碼段、堆棧段和資料段,這是一種"昂貴"的多任務工作方式。而運作于一個程序中的多個線程,它們彼此之間使用相同的位址空間,共享大部分資料,啟動一個線程所花費的空間遠遠小于啟動一個程序所花費的空間,而且,線程間彼此切換所需的時間也遠遠小于程序間切換所需要的時間;

2.與程序相比,線程間的通信機制更友善。對不同程序來說,它們具有獨立的資料空間,要進行資料的傳遞隻能通過通信的方式進行,這種方式不僅費時,而且很不友善。線程則不然,由于同一程序下的線程之間共享資料空間,是以一個線程的資料可以直接為其它線程所用,這不僅快捷,而且友善;

3.提高應用程式響應。使用多線程技術,将耗時長的操作(time consuming)置于一個新的線程;

4.使多CPU系統更加有效。作業系統會保證當線程數不大于CPU數目時,不同的線程運作于不同的CPU上;

5.改善程式結構。一個既長又複雜的程序可以考慮分為多個線程,成為幾個獨立或半獨立的運作部分,這樣的程式會利于了解和修改。

何時使用多線程技術,何時避免用它,是我們需要掌握的重要課題。多線程技術是一把雙刃劍,在使用時需要充分考慮它的優缺點。

多線程處理可以同時運作多個線程。由于多線程應用程式将程式劃分成多個獨立的任務,是以可以在以下方面顯著提高性能: 

(1)多線程技術使程式的響應速度更快 ,因為使用者界面可以在進行其它工作的同時一直處于活動狀态;

(2)目前沒有進行處理的任務時可以将處理器時間讓給其它任務;

(3)占用大量處理時間的任務可以定期将處理器時間讓給其它任務;

(4)可以随時停止任務;

(5)可以分别設定各個任務的優先級以優化性能。

 是否需要建立多個線程取決于各種因素。在以下情況下,最适合采用多線程處理: 

(1)耗時或大量占用處理器的任務阻塞使用者界面操作;

(2)各個任務必須等待外部資源 (如遠端檔案或 Internet連接配接)。

同樣的 ,多線程也存在許多缺點 ,在考慮多線程時需要進行充分的考慮。多線程的主要缺點包括: 

(1)等候使用共享資源時造成程式的運作速度變慢。這些共享資源主要是獨占性的資源 ,如列印機等。

(2)對線程進行管理要求額外的 CPU開銷。線程的使用會給系統帶來上下文切換的額外負擔。當這種負擔超過一定程度時,多線程的特點主要表現在其缺點上,比如用獨立的線程來更新數組内每個元素。

(3)線程的死鎖。即較長時間的等待或資源競争以及死鎖等多線程症狀。

(4)對公有變量的同時讀或寫。當多個線程需要對公有變量進行寫操作時,後一個線程往往會修改掉前一個線程存放的資料,進而使前一個線程的參數被修改;另外 ,當公用變量的讀寫操作是非原子性時,在不同的機器上,中斷時間的不确定性,會導緻資料在一個線程内的操作産生錯誤,進而産生莫名其妙的錯誤,而這種錯誤是程式員無法預知的。