線程和進程

線程

線程是進程的一個執行流,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位,本身沒有獨立的地址和系統資源,是程序執行的最小單位。說通俗點,線程就是任勞任怨的幹活。

進程

直觀點說,保存在硬盤上的程序運行以後,會在內存空間裏形成一個獨立的內存體,

這個內存體有自己的地址空間,有自己的堆,上級掛靠單位是操作系統。操作系統

會以進程爲單位,分配系統資源,所以我們也說,進程是資源分配的最小單位。

區別和聯繫

如果說進程是一個資源管家,負責從主人那裏要資源的話,那麼線程就是幹活的苦力。

一個管家必須完成一項工作,就需要最少一個苦力,也就是說,一個進程最少包含一個線程,也可以包含多個線程。苦力要幹活,就需要依託於管家,所以說一個線程,必須屬於某一個進程。進程有自己的地址空間,線程使用進程的地址空間,也就是說,進程裏的資源,線程都是有權訪問的,比如說堆啊,棧啊,靜態存儲區什麼的。

線程就是個無產階級,但無產階級幹活,總得有自己的勞動工具吧,這個勞動工具就是棧,線程有自己的棧,這個棧仍然是使用進程的地址空間,只是這塊空間被線程標記爲了棧。

每個線程都會有自己私有的棧,這個棧是不可以被其他線程所訪問的。

線程與同屬一個進程的其他的線程共享進程所擁有的全部資源,線程有自己的堆棧和局部變量,但線程沒有單獨的地址空間,一個線程死掉就等於整個進程死掉。

都能提高應用程序響應速度,進行多任務的並行處理。改善程序結構。一個既長又複雜的進程可以考慮分爲多個線程/進程,成爲幾個獨立或半獨立的運行部分,這樣的程序會利於理解和修改。能充分利用多核cpu的性能。它們消耗的資源:創建線程對操作系統來說是外傷,創建進程是內傷。

 

1 

 

進程,線程該如何選擇

按照多個不同的維度,來看看多進程和多線程的對比(注:因爲是感性的比較,因此都是相對的,不是說一個好得不得了,另一個差的無法忍受。沒有最好,只有更好!)

2

根據經驗,可以參考以下幾個方面來選擇:

1)需要頻繁創建銷燬的優先用線程。

實例:web服務器。來一個建立一個線程,斷了就銷燬線程。要是用進程,創建和銷燬的代價是很難承受的。

2)需要進行大量計算的優先使用線程。

所謂大量計算,當然就是要消耗很多cpu,切換頻繁了,這種情況先線程是最合適的。

實例:圖像處理、算法處理

3)強相關的處理用線程,弱相關的處理用進程。

什麼叫強相關、弱相關?理論上很難定義,給個簡單的例子就明白了。

一般的server需要完成如下任務:消息收發和消息處理。消息收發和消息處理就是弱相關的任務,而消息處理裏面可能又分爲消息解碼、業務處理,這兩個任務相對來說相關性就要強多了。因此消息收發和消息處理可以分進程設計,消息解碼和業務處理可以分線程設計。

4)可能擴展到多機分佈的用進程,多核分佈的用線程。

5)都滿足需求的情況下,用你最熟悉、最拿手的方式。


【轉自】:業餘草: » 線程和進程{http://www.xttblog.com/?p=177}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章