?簡(jiǎn)述線程和進(jìn)程

? ? ? ? ? ? 本文寫(xiě)于在經(jīng)歷不少項(xiàng)目的愈來(lái)愈多發(fā)現(xiàn)線程和進(jìn)程的重要性。「屬于操作系統(tǒng)的知識(shí)」

? ? ? ? ? ? 在一次項(xiàng)目中,我使用node去編寫(xiě)了一個(gè)服務(wù)(server A),使用pm2去持續(xù)運(yùn)行這個(gè)服務(wù),接著我又寫(xiě)了一個(gè)node服務(wù)(server B),又用pm2去持續(xù)運(yùn)行第二個(gè)服務(wù),但是我的服務(wù)器CPU是單核的,所以嚴(yán)格來(lái)說(shuō)一次只能跑一個(gè)服務(wù)(server A 或者 server B),另外一個(gè)服務(wù)必然處于就緒狀態(tài),等待進(jìn)入。

? ? ? ? ? 這里簡(jiǎn)單分析一下:

? ? ? ? ? 1、Pm2 是一個(gè)node的進(jìn)程管理器,這里可以忽略;

? ? ? ? ? 2、server A 或者server B 都是一個(gè)程序,或者說(shuō)是一個(gè)進(jìn)程;

? ? ? ? ? 3、CPU的數(shù)量決定著可運(yùn)行進(jìn)程的多少;

? ? ? ? ? 簡(jiǎn)單梳理一下知識(shí)定義:

? ? ? ? ? 進(jìn)程

? ? ? ? ? 進(jìn)程是正在進(jìn)行的程序的實(shí)例,1個(gè)進(jìn)程就是1個(gè)正在進(jìn)行的程序,2個(gè)進(jìn)程就是2個(gè)正在進(jìn)行的程序,1個(gè)程序被運(yùn)行2遍也是2個(gè)進(jìn)程。

? ? ? ? ? 單核處理器(CPU)一次只能處理一個(gè)進(jìn)程,但是它是被很多個(gè)進(jìn)程一起共享的,所以在決定使用哪一個(gè)進(jìn)程的時(shí)候就歸調(diào)度算法來(lái)管理,其他沒(méi)被進(jìn)行的進(jìn)程就得等待分配。

? ? ? ? ? 像上文的例子說(shuō)到的,server A 或者server B 被運(yùn)行一次就算是一個(gè)進(jìn)程,但是由于我的服務(wù)器是單核的,所以server A 和server B是不可能同時(shí)都被CPU處理,只能A先B后,或者B先A后,由調(diào)度算法來(lái)管理。

? ? ? ? ? 線程

? ? ? ? 線程是進(jìn)程的一個(gè)執(zhí)行序列,「簡(jiǎn)單來(lái)說(shuō),就是程序代碼的執(zhí)行順序和執(zhí)行指令」,相當(dāng)于在一個(gè)進(jìn)程中又劃分了很多個(gè)小的進(jìn)程,而這些進(jìn)程就被稱為線程。

? ? ? ? 一個(gè)進(jìn)程可以被很多個(gè)線程共享,可知猶如一個(gè)進(jìn)程包含了很多線程。

? ? ? ? 像server A 是一個(gè)進(jìn)程,是用js編寫(xiě)的,所以是一個(gè)單線程,在這個(gè)程序里,會(huì)按著server A里面的代碼按照一定的執(zhí)行順序來(lái)執(zhí)行代碼。「nodeJs是一個(gè)單線程,雖然它的底層是由多線程組成的」。

? ? 兩者的區(qū)別:

? ? 1、線程是調(diào)度的基本單位 ,進(jìn)程是資源分配的基本單位

? ? 2、進(jìn)程之間互相獨(dú)立,通信困難而且消耗資源大,可以使用管道,信號(hào),套接字,共享內(nèi)存,消息隊(duì)列等方法通信。線程由于共享同一進(jìn)程,所以通信簡(jiǎn)單而且消耗資源少,可以使用讀寫(xiě)進(jìn)程數(shù)據(jù)段來(lái)通信。

? ? 3、由于進(jìn)程之間互相獨(dú)立,進(jìn)程切換,需要保持上下文的一致,所以切換滿;相比較線程由于共享同一線程的上下文,所以要快。

? ? 總結(jié):一個(gè)處理器(CPU)有著很多進(jìn)程,一個(gè)進(jìn)程有著很多線程。

? ? 本文作為一個(gè)簡(jiǎn)單的講訴,主要?dú)w納一下進(jìn)程和線程的知識(shí)點(diǎn),和作為js運(yùn)行機(jī)制的一個(gè)小拓展。

? ? 詳細(xì)的資料請(qǐng)閱讀《現(xiàn)代操作系統(tǒng)》。

? ? 博客原文:https://wusiqing.com/?p=306

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容