進程,線程與協程的區別


(1)進程

進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動。進程是系統進行資源分配和調度的獨立單位。每個進程都有自己獨立的內存空間。由於進程比較重量,占據獨立的內存,所以進程切換的開銷(棧,寄存器,虛擬內存,文件句柄)比較大,但是相對比較穩定安全。

(2)線程

線程是進程的一個實體,是CPU調度和分派的基本單位,他是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是他可與同屬一個進程的其他線程共享進程所擁有的全部資源。線程之間的通信主要通過共享內存,上下文切換很快,資源開銷較少,但是相對於進程不夠穩定容易丟失數據。

(3)協程

寫成是一種用戶態的輕量級線程,協程的調度完全由用戶控制。協程擁有自己的寄存器上下文和棧。協程調度切換時,將寄存器上下文和棧保存到其他地方。在切回來的時候,恢復先前保存的寄存器上下文和棧,直接操作棧則基本沒有內核切換的開銷,可以不加鎖的訪問全局變量,所以上下文的切換非常快。

區別:1、進程與線程的區別

線程是指進程內的一個執行單元,也是進程內的可調度實體。其主要區別:

(1)地址空間:線程是進程內的一個執行單元,進程內至少有一個線程,他們共享進程的地址空間,而進程有自己獨立的地址空間。

(2)資源擁有:進程是資源分配和擁有的單位,同一個進程內的線程共享進程的資源

(3)線程是處理器調度的基本單位,但是進程不是。

(4)二者均可並發執行(*共同點*)

(5)每一個獨立的線程有一個程序運行的入口,順序執行序列和程序出口,但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程控制。

2、協程與線程的區別

(1)一個線程可以有多個協程,一個進程也可以單獨擁有多個協程。

(2)進程線程都是同步機制,而協程則是異步

(3)協程能夠保留上一次調用時的狀態,每次過程重入時,就相當於進入上一次調用狀態

3、協程的優點

(1)協程執行的效率非常高。

(2)協程不需要多線程的鎖機制

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM