進程、線程、協程三者之間的聯系與區別


進程、線程、協程三者之間的聯系與區別
 

一、進程

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

 二、線程

 

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

 

 

三、協程

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

 

 

四、進程和線程的區別與聯系

    並發性:不僅進程之間可以並發執行,同一個進程的多個線程之間也可並發執行。
    擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源。
    系統開銷: 多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。    
    線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源的管理和保護;而進程正相反。同時,線程適合於在SMP機器上運行,而進程則可以跨機器遷移。
    協程和線程區別:協程避免了無意義的調度,由此可以提高性能,但也因此,程序員必須自己承擔調度的責任,同時,協程也失去了標准線程使用多CPU的能力。

協程的特點在於是一個線程執行,那和多線程比,協程有何優勢?
    1.極高的執行效率:因為子程序切換不是線程切換,而是由程序自身控制,因此,沒有線程切換的開銷,和多線程比,線程數量越多,協程的性能優勢就越明顯;
    2.不需要多線程的鎖機制:因為只有一個線程,也不存在同時寫變量沖突,在協程中控制共享資源不加鎖,只需要判斷狀態就好了,所以執行效率比多線程高很多。

【聯系】:線程與進程的聯系
    1.一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程;
    2.資源分配給進程,同一進程的所有線程共享該進程的所有資源;
    3.處理機分給線程,即真正在處理機上運行的是線程;
    4.線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。
 

    操作系統的設計,因此可以歸結為三點:

    (1)以多進程形式,允許多個任務同時運行;

    (2)以多線程形式,允許單個任務分成不同的部分運行;

    (3)提供協調機制,一方面防止進程之間和線程之間產生沖突,另一方面允許進程之間和線程之間共享資源。

有需要交流的小伙伴可以點擊這里加本人QQ:luke


免責聲明!

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



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