1. 程式人生 > >探討程序、執行緒、協程的區別

探討程序、執行緒、協程的區別

它們都是因程式的併發執行程式而產生

一、程序

①、程序是資源分配的基本單位,程式執行時系統就會建立一個程序,例如開啟qq應用就建立一個程序。

②、作業系統會為它分配專門的程序控制塊

③、三種狀態:就緒狀態、執行狀態、阻塞狀態

二、執行緒

①、執行緒是程式執行時的最小單位,一個程序可以由很多個執行緒組成,但至少包含一個主執行緒,例如qq裡有多個功能則多個執行緒

三、協程

①、協程是一種使用者態的輕量級執行緒它是執行緒更小的執行單元,它的排程完全由使用者控制

四、程序與執行緒的區別

①、程序開銷更大:程序有自己的獨立地址空間,每啟動一個程序,系統就會為它分配地址空間,建立資料表來維護程式碼段、堆疊段和資料段,這種操作非常昂貴。而執行緒是共享程序中的資料的,使用相同的地址空間,因此CPU切換一個執行緒的花費遠比程序要小很多。

②、程序共享資料更復雜:同一程序下的執行緒共享全域性變數、靜態變數等資料,而程序之間的通訊需要以通訊的方式進行

③、程序健壯性更好:多執行緒程式只要有一個執行緒死掉,整個程序也死掉,而一個程序死掉並不會對另外一個程序造成影響,因為程序有自己獨立的地址空間,執行緒之間沒有單獨的地址空間。