為何要用多線程編程
線程,有時被稱為輕量級進程(Lightweight
Process,LWP),是程序執行流的最小單元。進程是操作係統結構的基礎;是一個正在執行的程序;計算機中正在運行的程序實例;可以分配給處理器並由處理器執行的一個實體;由單一順序的執行顯示,一個當前狀態和一組相關的係統資源所描述的活動單元。
線程(thread)技術早在60年代就被提出,但真正應用多線程到操作係統中去,是在80年代中期,solaris是這方麵的佼佼者。傳統的Unix也支持線程的概念,但是在一個進程(process)中隻允許有一個線程,這樣多線程就意味著多進程。現在,多線程技術已經被許多操作係統所支持,包括Windows/NT,當然,也包括Linux。
為什麼有了進程的概念後,還要再引入線程呢?使用多線程到底有哪些好處?什麼的係統應該選用多線程?我們首先必須回答這些問題。
使用多線程的理由之一是和進程相比,它是一種非常"節儉"的多任務操作方式。我們知道,在Linux係統下,啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這是一種"昂貴"的多任務工作方式。而運行於一個進程中的多個線程,它們彼此之間使用相同的地址空間,共享大部分數據,啟動一個線程所花費的空間遠遠小於啟動一個進程所花費的空間,而且,線程間彼此切換所需的時間也遠遠小於進程間切換所需要的時間。據統計,總的說來,一個進程的開銷大約是一個線程開銷的30倍左右,當然,在具體的係統上,這個數據可能會有較大的區別。
使用多線程的理由之二是線程間方便的通信機製。對不同進程來說,它們具有獨立的數據空間,要進行數據的傳遞隻能通過通信的方式進行,這種方式不僅費時,而且很不方便。線程則不然,由於同一進程下的線程之間共享數據空間,所以一個線程的數據可以直接為其它線程所用,這不僅快捷,而且方便。當然,數據的共享也帶來其他一些問題,有的變量不能同時被兩個線程所修改,有的子程序中聲明為static的數據更有可能給多線程程序帶來災難性的打擊,這些正是編寫多線程程序時最需要注意的地方。
除了以上所說的優點外,不和進程比較,多線程程序作為一種多任務、並發的工作方式,當然有以下的優點:
1) 提高應用程序響應。這對圖形界麵的程序尤其有意義,當一個操作耗時很長時,整個係統都會等待這個操作,此時程序不會響應鍵盤、鼠標、菜單的操作,而使用多線程技術,將耗時長的操作(time consuming)置於一個新的線程,可以避免這種尷尬的情況。
2) 使多CPU係統更加有效。操作係統會保證當線程數不大於CPU數目時,不同的線程運行於不同的CPU上。
3) 改善程序結構。一個既長又複雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利於理解和修改。
最後更新:2017-04-02 15:15:18