進程,線程,協程的區別


進程

  • 不共享任何狀態

  • 調度由操作系統完成

  • 有獨立的內存空間(上下文切換的時候需要保存棧、cpu寄存器、虛擬內存、以及打開的相關句柄等信息,開銷大)

  • 通訊主要通過信號傳遞的方式來實現(實現方式有多種,信號量、管道、事件等,通訊都需要過內核,效率低)

線程

  • 共享變量(解決了通訊麻煩的問題,但是對於變量的訪問需要加鎖)

  • 調度由操作系統完成

  • 一個進程可以有多個線程,每個線程會共享父進程的資源(創建線程開銷占用比進程小很多,可創建的數量也會很多)

  • 通訊除了可使用進程間通訊的方式,還可以通過共享內存的方式進行通信(通過共享內存通信比通過內核要快很多)

  • 線程的使用會給系統帶來上下文切換的額外負擔。

協程

  • 調度完全由用戶控制

  • 一個線程(進程)可以有多個協程

  • 每個線程(進程)循環按照指定的任務清單順序完成不同的任務(當任務被堵塞時,執行下一個任務;當恢復時,再回來執行這個任務;任務間切換只需要保存任務的上下文,沒有內核的開銷,可以不加鎖的訪問全局變量)

  • 協程需要保證是非堵塞的且沒有相互依賴

  • 協程基本上不能同步通訊,多采用異步的消息通訊,效率比較高


作者:倚天杖
鏈接:https://www.imooc.com/article/40799
來源:慕課網


免責聲明!

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



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