一雹拄、進程與線程的區(qū)別:
(1)進程是操作系統(tǒng)分配資源的最小單元,線程是操作系統(tǒng)調(diào)度的最小單元掌呜。
(2)進程采用fork創(chuàng)建(復(fù)制虛擬地址空間)滓玖,線程采用clone創(chuàng)建(共享而已)。
(3)進程切換與線程切換的區(qū)別
進程切換要保存
?頁表——對應(yīng)虛擬內(nèi)存資源质蕉、
?文件描述符表/打開文件表——對應(yīng)打開的文件資源
?寄存器——對應(yīng)運行時數(shù)據(jù)
?信號控制信息/進程運行信息
? ?而線程切換只要保存線程的一些運行時的數(shù)據(jù)势篡,比如線程的id、寄存器中的值模暗、棧數(shù)據(jù)禁悠。
所以線程的切換速度要比進程快的多。
(4)一個進程包含多個線程兑宇,同個進程中的線程資源是共享的
(5)一個進程奔潰不會導(dǎo)致別的進程奔潰碍侦,一個線程奔潰會導(dǎo)致同個進程里面的線程奔潰。
二隶糕、協(xié)程:
????????協(xié)程祝钢,是一種比線程更加輕量級的存在,一個線程可以擁有多個協(xié)程若厚,并且一個線程內(nèi)的協(xié)程絕對是串行運行的拦英。協(xié)程是一個函數(shù),可以進行上下文切換测秸,是在用戶(應(yīng)用程序疤估,而不是操作系統(tǒng))灾常,由用戶自己定義何時切換,切換內(nèi)容保存在用戶自己的變量中(用戶椓迥矗或者堆)钞瀑,在用戶態(tài)中即可進行切換,效率高慷荔。
協(xié)程可用于I/O阻塞型雕什,有5個I/O的認為要處理,可以用協(xié)程显晶,當一個協(xié)程(特殊子進程)阻塞時贷岸,它可以切換到其他沒有阻塞的協(xié)程上去繼續(xù)執(zhí)行,這樣就能得到比較高的效率磷雇。當I/O達到數(shù)量較大時應(yīng)用“多線程+協(xié)程”處理偿警。
注:圖來自網(wǎng)絡(luò)。