1. 程式人生 > >面試題:1,程序和執行緒的區別?什麼時候用程序?什麼時候用執行緒?為什麼你的專案中用的是執行緒?為什麼不用程序?如果只有程序,對你這個專案有沒有影響?

面試題:1,程序和執行緒的區別?什麼時候用程序?什麼時候用執行緒?為什麼你的專案中用的是執行緒?為什麼不用程序?如果只有程序,對你這個專案有沒有影響?

答:首先得知道什麼是程序什麼是執行緒,我的理解是程序是指在系統中正在執行的一個應用程式;程式一旦執行就是程序,或者更專業化來說:程序是指程式執行時的一個例項,即它是程式已經執行到課中程度的資料結構的彙集。從核心的觀點看,程序的目的就是擔當分配系統資源(CPU時間、記憶體等)的基本單位。執行緒是系統分配處理器時間資源的基本單元,或者說程序之內獨立執行的一個單元執行流。程序——資源分配的最小單位,執行緒——程式執行的最小單位。

執行緒程序的區別體現在4個方面:

第一:因為程序擁有獨立的堆疊空間和資料段,所以每當啟動一個新的程序必須分配給它獨立的地址空間,建立眾多的資料表來維護它的程式碼段、堆疊段和資料段,這對於多程序來說十分“奢侈”,系統開銷比較大,而執行緒不一樣,執行緒擁有獨立的堆疊空間,但是共享資料段,它們彼此之間使用相同的地址空間,共享大部分資料,比程序更節儉,開銷比較小,切換速度也比程序快,效率高,但是正由於程序之間獨立的特點,使得程序安全性比較高,也因為程序有獨立的地址空間,一個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是一個程序中的不同執行路徑。一個執行緒死掉就等於整個程序死掉。

第二:體現在通訊機制上面,正因為程序之間互不干擾,相互獨立,程序的通訊機制相對很複雜,譬如管道,訊號,訊息佇列,共享記憶體,套接字等通訊機制,而執行緒由於共享資料段所以通訊機制很方便。。

第三:體現在CPU系統上面,執行緒使得CPU系統更加有效,因為作業系統會保證當執行緒數不大於CPU數目時,不同的執行緒運行於不同的CPU上。

第四:體現在程式結構上,舉一個簡明易懂的列子:當我們使用程序的時候,我們不自主的使用if else巢狀來判斷pid,使得程式結構繁瑣,但是當我們使用執行緒的時候,基本上可以甩掉它,當然程式內部執行功能單元需要使用的時候還是要使用,所以執行緒對程式結構的改善有很大幫助。

程序與執行緒的選擇取決以下幾點:1、需要頻繁建立銷燬的優先使用執行緒;因為對程序來說建立和銷燬一個程序代價是很大的。2、執行緒的切換速度快,所以在需要大量計算,切換頻繁時用執行緒,還有耗時的操作使用執行緒可提高應用程式的響應3、因為對CPU系統的效率使用上執行緒更佔優,所以可能要發展到多機分佈的用程序,多核分佈用執行緒;4、並行操作時使用執行緒,如C/S架構的伺服器端併發執行緒響應使用者的請求;5、需要更穩定安全時,適合選擇程序;需要速度時,選擇執行緒更好。

因為我的專案中需要對資料段的資料共享,可以被多個程式所修改,所以使用執行緒來完成此操作,無需加入複雜的通訊機制,使用程序需要新增複雜的通訊機制實現資料段的共享,增加了我的程式碼的繁瑣,而且使用執行緒開銷小,專案執行的速度快,效率高。

如果只用程序的話,雖然安全性高,但是對程式碼的簡潔性不好,程式結構繁瑣,開銷比較大,還需要加入複雜的通訊機制,會使得我的專案程式碼量大大增加,切換速度會變的很慢,執行效率降低不少。。