一段程序的執行過程,資源分配的基本單位,進程有三種狀態,就緒、運行和阻塞.一個程序運行時,系統就會建立一個進程,併爲它分配資源,而後把進程放入進程就緒隊列(就緒),等到進程調度器選中它時就會爲其分配CPU時間,程序開始真正執行(運行),當程序條件不夠的時候,須要等待條件知足才能執行(阻塞)編程
程序執行時的最小執行單元,是進程的執行流,一個進程能夠有多個線程組成,線程間共享進程的全部資源,每一個線程有本身的堆棧和局部變量.多線程
一個程序至少一個進程,一個進程至少一個線程.併發
1.同一進程的線程共享本進程的地址空間,進程之間則是獨立的地址空間
2.同一進程內的線程共享本進程的資源(內存,I/O cpu),單進程之間的資源是獨立的.
3.線程執行開銷小,但一個線程的死掉就等於整個進程死掉;進程比線程健壯,單進程切換時耗費資源較大,效率差
4.線程之間的通訊更方便,同一進程下的線程共享全局變量、靜態變量等數據,而進程之間的通訊須要以通訊的方式(IPC)進行。不過如何處理好同步與互斥是編寫多線程程序的難點。
5.進程是資源分配的最小單位,線程是程序執行的最小單位.異步
多線程,多進程 都可實現併發.線程快而進程可靠性高
多進程編程,進程之間獨立數據空間,數據傳遞須要依靠通訊機制,編程調試簡單,可靠性高 可是 建立,銷燬,切換速度變慢,內存.資源佔用大
多線程 多線程間數據資源貢獻,通信方便快捷,建立銷燬切換速度快,內存,資源佔用大,可是,編程調試複雜,可靠性較差線程
協程是一種用戶態的輕量級線程,協程的調度徹底由用戶控制。協程擁有本身的寄存器上下文和棧。協程調度切換時,將寄存器上下文和棧保存到其餘地方,在切回來的時候,恢復先前保存的寄存器上下文和棧,直接操做棧則基本沒有內核切換的開銷,能夠不加鎖的訪問全局變量,因此上下文的切換很是快。調試
1.一個線程能夠多個協程,一個進程也能夠單獨擁有多個協程協程
2.線程進程都是同步機制,而協程則是異步隊列
3.協程能保留上一次調用時的狀態,每次過程重入時,就至關於進入上一次調用的狀態進程