進程、線程、協程三者之間的聯系與區別
一、進程
進程,直觀點說,保存在硬盤上的程序運行以后,會在內存空間里形成一個獨立的內存體,這個內存體有自己獨立的地址空間,有自己的堆,上級掛靠單位是操作系統。操作系統會以進程為單位,分配系統資源(CPU時間片、內存等資源),進程是資源分配的最小單位。

線程,有時被稱為輕量級進程(Lightweight Process,LWP),是操作系統調度(CPU調度)執行的最小單位。

三、協程
協程是一種用戶態的輕量級線程,協程的調度完全由用戶控制。協程擁有自己的寄存器上下文和棧。協程調度切換時,將寄存器上下文和棧保存到其他地方,在切回來的時候,恢復先前保存的寄存器上下文和棧,直接操作棧則基本沒有內核切換的開銷,可以不加鎖的訪問全局變量,所以上下文的切換非常快。
協程在子程序內部可中斷的,然后轉而執行別的子程序,在適當的時候再返回來接着執行。

四、進程和線程的區別與聯系
並發性:不僅進程之間可以並發執行,同一個進程的多個線程之間也可並發執行。擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源。
系統開銷: 多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。
線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源的管理和保護;而進程正相反。同時,線程適合於在SMP機器上運行,而進程則可以跨機器遷移。
協程和線程區別:協程避免了無意義的調度,由此可以提高性能,但也因此,程序員必須自己承擔調度的責任,同時,協程也失去了標准線程使用多CPU的能力。
協程的特點在於是一個線程執行,那和多線程比,協程有何優勢?
1.極高的執行效率:因為子程序切換不是線程切換,而是由程序自身控制,因此,沒有線程切換的開銷,和多線程比,線程數量越多,協程的性能優勢就越明顯;
2.不需要多線程的鎖機制:因為只有一個線程,也不存在同時寫變量沖突,在協程中控制共享資源不加鎖,只需要判斷狀態就好了,所以執行效率比多線程高很多。
【聯系】:線程與進程的聯系
1.一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程;
2.資源分配給進程,同一進程的所有線程共享該進程的所有資源;
3.處理機分給線程,即真正在處理機上運行的是線程;
4.線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。
操作系統的設計,因此可以歸結為三點:
(1)以多進程形式,允許多個任務同時運行;
(2)以多線程形式,允許單個任務分成不同的部分運行;
(3)提供協調機制,一方面防止進程之間和線程之間產生沖突,另一方面允許進程之間和線程之間共享資源。