創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
目前創(chuàng)新互聯(lián)公司已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計、東光網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。PHP的進(jìn)程模型是什么?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
一個進(jìn)程就是一個正在執(zhí)行程序的實例,包括程序計數(shù)器、寄存器和變量的當(dāng)前值。從概念上說,每個進(jìn)程擁有它自己的虛擬CPU。當(dāng)然,實際上真正的CPU在各進(jìn)程之間來回切換。但為了理解這種系統(tǒng),考慮在(偽)并行情況下運(yùn)行的進(jìn)程集,要比我們試圖跟蹤C(jī)PU如何在程序間來回切換簡單得多。正如我們所看到的,這種快速的切換稱作多道程序設(shè)計。
一、PHP進(jìn)程模型
進(jìn)程的概念是操作系統(tǒng)的結(jié)構(gòu)的基礎(chǔ)。Multics的設(shè)計者在20世紀(jì)60年代首次使用了這個技術(shù)詞語,它比作業(yè)更通用一些。關(guān)于進(jìn)程的定義,如下所示:
1、一個正在執(zhí)行的程序。
2、計算機(jī)中正在運(yùn)行的程序的一個實例。
3、可以分配給處理器并由處理器執(zhí)行的一個實體。
4、由單一的順序的執(zhí)行線程、一個當(dāng)前狀態(tài)和一組相關(guān)的系統(tǒng)資源所描述的活動單元。
二、進(jìn)程與線程區(qū)別
進(jìn)程
是資源分配的基本單位。所有與該進(jìn)程有關(guān)的資源,都被記錄在進(jìn)程控制塊PCB
中。以表示該進(jìn)程擁有這些資源或正在使用它們。
另外,進(jìn)程也是搶占處理機(jī)的調(diào)度單位,它擁有一個完整的虛擬地址空間。當(dāng)進(jìn)程發(fā)生調(diào)度時,不同的進(jìn)程擁有不同的虛擬地址空間,而同一進(jìn)程內(nèi)的不同線程共享同一地址空間。
與進(jìn)程相對應(yīng),線程與資源分配無關(guān),它屬于某一個進(jìn)程,并與進(jìn)程內(nèi)的其他線程一起共享進(jìn)程的資源。
線程
只由相關(guān)堆棧(系統(tǒng)?;蛴脩魲#┘拇嫫骱途€程控制表TCB
組成。寄存器可被用來存儲線程內(nèi)的局部變量,但不能存儲其他線程的相關(guān)變量。
通常在一個進(jìn)程中可以包含若干個線程,它們可以利用進(jìn)程所擁有的資源。在引入線程的操作系統(tǒng)中,通常都是把進(jìn)程作為分配資源的基本單位,而把線程作為獨立運(yùn)行和獨立調(diào)度的基本單位。由于線程比進(jìn)程更小,基本上不擁有系統(tǒng)資源,故對它的調(diào)度所付出的開銷就會小得多,能更高效的提高系統(tǒng)內(nèi)多個程序間并發(fā)執(zhí)行的程度,從而顯著提高系統(tǒng)資源的利用率和吞吐量。因而近年來推出的通用操作系統(tǒng)都引入了線程,以便進(jìn)一步提高系統(tǒng)的并發(fā)性,并把它視為現(xiàn)代操作系統(tǒng)的一個重要指標(biāo)。
線程與進(jìn)程的區(qū)別可以歸納為以下4點:
(1)進(jìn)程是資源的分配和調(diào)度的一個獨立單元,而線程是CPU調(diào)度的基本單元
(2)同一個進(jìn)程中可以包括多個線程,并且線程共享整個進(jìn)程的資源(寄存器、堆棧、上下文),一個進(jìn)行至少包括一個線程。
(3)進(jìn)程的創(chuàng)建調(diào)用fork或者vfork,而線程的創(chuàng)建調(diào)用pthread_create,進(jìn)程結(jié)束后它擁有的所有線程都將銷毀,而線程的結(jié)束不會影響同個進(jìn)程中的其他線程的結(jié)束
(4)線程是輕量級的進(jìn)程,它的創(chuàng)建和銷毀所需要的時間比進(jìn)程小很多,所有操作系統(tǒng)中的執(zhí)行功能都是創(chuàng)建線程去完成的
(5)線程中執(zhí)行時一般都要進(jìn)行同步和互斥,因為他們共享同一進(jìn)程的所有資源
(6)線程有自己的私有屬性TCB,線程id,寄存器、硬件上下文,而進(jìn)程也有自己的私有屬性進(jìn)程控制塊PCB,這些私有屬性是不被共享的,用來標(biāo)示一個進(jìn)程或一個線程的標(biāo)志
三、進(jìn)程間通信方式
1、管道(Pipe)及有名管道(named pipe):管道可用于具有親緣關(guān)系進(jìn)程間的通信,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關(guān)系進(jìn)程間的通信;
2、信號(Signal):信號是比較復(fù)雜的通信方式,用于通知接受進(jìn)程有某種事件發(fā)生,除了用于進(jìn)程間通信外,進(jìn)程還可以發(fā)送信號給進(jìn)程本身;linux除了支持Unix早期信號語義函數(shù)sigal外,還支持語義符合Posix.1標(biāo)準(zhǔn)的信號函數(shù)sigaction(實際上,該函數(shù)是基于BSD的,BSD為了實現(xiàn)可靠信號機(jī)制,又能夠統(tǒng)一對外接口,用sigaction函數(shù)重新實現(xiàn)了signal函數(shù));
3、報文(Message)隊列(消息隊列):消息隊列是消息的鏈接表,包括Posix消息隊列system V消息隊列。有足夠權(quán)限的進(jìn)程可以向隊列中添加消息,被賦予讀權(quán)限的進(jìn)程則可以讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點。
4、共享內(nèi)存:使得多個進(jìn)程可以訪問同一塊內(nèi)存空間,是最快的可用IPC形式。是針對其他通信機(jī)制運(yùn)行效率較低而設(shè)計的。往往與其它通信機(jī)制,如信號量結(jié)合使用,來達(dá)到進(jìn)程間的同步及互斥。
信號量(semaphore):主要作為進(jìn)程間以及同一進(jìn)程不同線程之間的同步手段。
5、套接口(Socket):更為一般的進(jìn)程間通信機(jī)制,可用于不同機(jī)器之間的進(jìn)程間通信。起初是由Unix系統(tǒng)的BSD分支開發(fā)出來的,但現(xiàn)在一般可以移植到其它類Unix系統(tǒng)上:Linux和System V的變種都支持套接字。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。