三者分別代表什么灌具?
- 進程:是并發(fā)執(zhí)行的程序在執(zhí)行過程中分配和管理的基本單位青团, 是一個動態(tài)概念像棘。
- 線程:是進程中的一個運行實體,是CPU的調(diào)度單位壶冒,一般稱為輕量級線程缕题。
- 協(xié)程:是一種用戶態(tài)的輕量級線程,調(diào)度全由用戶控制胖腾。
線程和進程的區(qū)別
- 進程是資源分配的最小單位烟零,線程是程序執(zhí)行的最小單元
- 進程擁有自己的獨立空間,每啟動一個進程咸作,系統(tǒng)都會為其分配地址空間锨阿。線程是進程的一個實體,一個進程至少有一個線程记罚,一個進程內(nèi)的所有線程共享進程的資源墅诡。
3.線程占用的資源比進程少很多,故創(chuàng)建線程和切換線程的開銷小很多桐智;一個進程的死亡一般不會對其他進程有影響末早,而一個線程死亡,可能會導(dǎo)致整個進程死亡说庭。
這里還會涉及多進程然磷、多線程的對比
簡單概括就是:多進程是指計算機同時運行多個進程,里每個進程都擁有自己的數(shù)據(jù)刊驴、互不干涉姿搜;共享復(fù)雜,需要IPC捆憎,同步簡單舅柜。占用內(nèi)存多切換復(fù)雜。多線程是指一個進程里有多個線程在執(zhí)行躲惰,這些線程共享所屬進程的數(shù)據(jù)致份,同步較難,CPU利用率高礁扮,創(chuàng)建知举、銷毀瞬沦、切換簡單太伊。
關(guān)于協(xié)程:
- 首先是用戶態(tài)的概念。為了防止進程訪問對操作系統(tǒng)的穩(wěn)定運行造成破會逛钻,對一些資源的額訪問進行了等級劃分僚焦,分為內(nèi)核態(tài)和用戶態(tài)。當一個進程在執(zhí)行用戶自己的代碼時處于用戶運行態(tài)曙痘,此時特權(quán)級最低為3級芳悲,大部分用戶直接面對的程序都是運行在用戶態(tài)立肘。Ring3狀態(tài)不能訪問Ring0的內(nèi)核地址空間,包括代碼和數(shù)據(jù)名扛。
- 協(xié)程的調(diào)度谅年,協(xié)程有自己的寄存器上下文和棧。協(xié)程調(diào)度切換時肮韧,將寄存器上下文和棧保存到其他地方融蹂。在切回來的時候,恢復(fù)先前保存的寄存器上下文和棧弄企,直接操作棾迹基本沒有內(nèi)核切換的開銷,可以不加鎖訪問全局變量拘领,協(xié)程時異步機制意乓。
進程在需要操作系統(tǒng)幫助完成一些用戶態(tài)自己沒有特權(quán)和能力完成的操作時就會切換道內(nèi)核態(tài)。
進程間通信
PIC(InterProcess Communication)是指在不同的進程之間交換信息约素。
主要方式有如下幾種
進程間通信方式.png
線程間通信
線程間通信主要用于線程同步届良,故線程沒有像進程通信中用于數(shù)據(jù)交換的通信機制,主要有如下幾種方式:
- 鎖機制:
- 互斥鎖:以排它方式阻止數(shù)據(jù)結(jié)構(gòu)被并發(fā)修改的方式
- 讀寫鎖:允許多個線程同時讀共享數(shù)據(jù)圣猎,對寫操作互斥
- 條件變量:以原子方式阻塞進程伙窃,直到某個特定條件為真為止。對條件測試是在互斥鎖的保護下進行的样漆。條件變量始終與互斥鎖一起使用为障。
- 信號量機制:無名線程信號量、有名線程信號量
- 信號機制: 類似于進程間的信號處理放祟。
操作系統(tǒng)分配的進程空間是指:內(nèi)核態(tài)內(nèi)存空間鳍怨、用戶態(tài)的堆棧(一般8M,從高地址向低地址增長)跪妥、數(shù)據(jù)段鞋喇、進程代碼段。
- 線程共享的有:進程代碼段眉撵、進程共有數(shù)據(jù)侦香、進程當前目錄、進程用戶ID纽疟、進程組ID罐韩。
- 線程私有的:線程ID、寄存器的值污朽、線程的棧散吵、線程優(yōu)先級、錯誤返回碼、線程信號屏蔽碼矾睦。
線程的上下文切換開銷包括:直接開銷和間接開銷晦款。
- 直接開銷:操作系統(tǒng)保存恢復(fù)上下文(CPU寄存器值,程序計數(shù)器值)所需的開銷枚冗; 線程調(diào)度器調(diào)度線程的開銷
- 間接開銷:處理器高速緩存重新加載的開銷缓溅;上下文切換可能導(dǎo)致整個一級高速緩存中的內(nèi)容被沖刷,即被寫入到下一級高速緩存或主存
(附:文章主要出自于自己的筆記和博文的整理赁温,若有侵權(quán)肛宋,請聯(lián)系我,我會刪除文章或者加上出處鏈接束世。)