php中的線程、進程和并發(fā)區(qū)別
https://mp.weixin.qq.com/s/Ps5w13TTmpnZx-RPWbsl1A
進程
進程是什么?進程是正在執(zhí)行的程序;進程是正在計算機上執(zhí)行的程序?qū)嵗贿M程是能分配給處理器并由處理器執(zhí)行的實體。進程一般會包括指令集和系統(tǒng)資源集,這里的指令集是指程序代碼,這里的系統(tǒng)資源集是指I/O、CPU、內(nèi)存等。綜合起來,我們也可以理解進程是具有一定獨立功能的程序在關(guān)于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位。
在進程執(zhí)行時,進程都可以被唯一的表示,由以下一些元素組成:
進程描述符:進程的唯一標識符,用來和其它進程區(qū)分。在Linux中叫進程ID,在系統(tǒng)調(diào)用fork期間生成,只是我們通過getpid返回的不是其pid字段,而是其線程組號tgid。
進程狀態(tài):我們常說的掛起、運行等狀態(tài),其表示的是當前的狀態(tài)。
優(yōu)先級:進程間的執(zhí)行調(diào)度相關(guān),相對于其它進程而言。
程序計數(shù)器:程序中即將被執(zhí)行的下一條指令的地址,該地址是內(nèi)核術(shù)中或用戶內(nèi)存空間中的內(nèi)存地址。
內(nèi)存指針:包括程序代碼和進程相關(guān)數(shù)據(jù)的指針,還有和其它進程共享內(nèi)存塊的指針。
上下文數(shù)據(jù):進程執(zhí)行時處理器的寄存器的數(shù)據(jù)。
I/O狀態(tài)信息:包括顯式的I/O請求、分配給進程的I/O設(shè)備等
記賬信息:可能包括處理器時間總和、使用的時鐘數(shù)總和、時間限制等
以上的這些元素都會放在一個叫做進程控制塊的數(shù)據(jù)結(jié)構(gòu)中。進程控制塊是操作系統(tǒng)能夠支持多進程和提供多處理的結(jié)構(gòu)。當操作系統(tǒng)做進程切換時,它會執(zhí)行兩步操作,一是中斷當前處理器中的進程,二是執(zhí)行下一個進程。不管是中斷還是執(zhí)行,進程控制塊中的程序計數(shù)器、上下文數(shù)據(jù)和進程狀態(tài)都會發(fā)生變化。當進程中斷時,操作系統(tǒng)會把程序計數(shù)器和處理器寄存器(對應(yīng)進程控制塊中的上下文數(shù)據(jù))保存到進程控制塊中的相應(yīng)位置,進程狀態(tài)也會有所變化,可能進入阻塞狀態(tài),也有可能進入就緒態(tài)。當執(zhí)行下一個進程時,操作系統(tǒng)按規(guī)則將下一個進程設(shè)置為運行態(tài),并加載即將要執(zhí)行進程的程序上下文數(shù)據(jù)和程序計數(shù)器等。
線程
進程有兩個特性部分:資源所有權(quán)和調(diào)度執(zhí)行。資源所有權(quán)是指進程包括了進程運行所需要的內(nèi)存空間、I/O等資源。調(diào)度執(zhí)行是指進程執(zhí)行過程中間的執(zhí)行路徑,或者說程序的指令執(zhí)行流。這兩個特性部分是可以分開的,分開后,擁有資料所有權(quán)的通常稱為進程,擁有執(zhí)行代碼的可分派部分的被稱之為線程或輕量級進程。
線程有“執(zhí)行的線索”的意思在里面,而進程在多線程環(huán)境中被定義為資源所有者,其還是會存儲進程的進程控制塊。線程的結(jié)構(gòu)與進程不同,每個線程包括:
線程狀態(tài): 線程當前的狀態(tài)。
一個執(zhí)行棧
私有的數(shù)據(jù)區(qū): 用于每個線程局部變量的靜態(tài)存儲空間
寄存器集: 存儲處理器的一些狀態(tài)
每個進程都有一個進程控制塊和用戶地址空間,每個線程都有一個獨立的棧和獨立的控制塊,都有自己一個獨立執(zhí)行上下文。其結(jié)構(gòu)如圖8.1所示。
線程在執(zhí)行過程中與進程有一些不同。每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨立執(zhí)行,必須依存在于進程之中,由進程提供多個線程執(zhí)行控制。從邏輯角度來看,多線程的意義在于一個進程中,有多個執(zhí)行部分可以同時執(zhí)行。此時,進程本身不是基本運行單位,而是線程的容器。
線程較之進程,其優(yōu)勢在于一個快,不管是創(chuàng)建新的線程還是終止一個線程;不管是線程間的切換還是線程間共享數(shù)據(jù)或通信,其速度與進程相比都有較大的優(yōu)勢。
并發(fā)及并行
并發(fā)又稱共行,是指能處理多個同時性活動的能力,并發(fā)事件之間不一定要同一時刻發(fā)生。比如,現(xiàn)代計算機系統(tǒng)可在同一段時間內(nèi)以進程的形式將多個程序加載到存儲器中,并借由處理器的時分復(fù)用,以在一個處理器上表現(xiàn)出同時運行的感覺。
并行是指同時發(fā)生的兩個并發(fā)事件,具有并發(fā)的含義,而并發(fā)則不一定并行。
并發(fā)和并行的區(qū)別就是一個處理器同時處理多個任務(wù)和多個處理器或者是多核的處理器同時處理多個不同的任務(wù)。前者是邏輯上的同時發(fā)生(simultaneous),而后者是物理上的同時發(fā)生。
參考資料
《操作系統(tǒng)精髓與設(shè)計原理》
PHP 任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。