您好,登錄后才能下訂單哦!
PHP的進程模型是什么?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
一個進程就是一個正在執行程序的實例,包括程序計數器、寄存器和變量的當前值。從概念上說,每個進程擁有它自己的虛擬CPU。當然,實際上真正的CPU在各進程之間來回切換。但為了理解這種系統,考慮在(偽)并行情況下運行的進程集,要比我們試圖跟蹤CPU如何在程序間來回切換簡單得多。正如我們所看到的,這種快速的切換稱作多道程序設計。
一、PHP進程模型
進程的概念是操作系統的結構的基礎。Multics的設計者在20世紀60年代首次使用了這個技術詞語,它比作業更通用一些。關于進程的定義,如下所示:
1、一個正在執行的程序。
2、計算機中正在運行的程序的一個實例。
3、可以分配給處理器并由處理器執行的一個實體。
4、由單一的順序的執行線程、一個當前狀態和一組相關的系統資源所描述的活動單元。
二、進程與線程區別
進程
是資源分配的基本單位。所有與該進程有關的資源,都被記錄在進程控制塊PCB
中。以表示該進程擁有這些資源或正在使用它們。
另外,進程也是搶占處理機的調度單位,它擁有一個完整的虛擬地址空間。當進程發生調度時,不同的進程擁有不同的虛擬地址空間,而同一進程內的不同線程共享同一地址空間。
與進程相對應,線程與資源分配無關,它屬于某一個進程,并與進程內的其他線程一起共享進程的資源。
線程
只由相關堆棧(系統棧或用戶棧)寄存器和線程控制表TCB
組成。寄存器可被用來存儲線程內的局部變量,但不能存儲其他線程的相關變量。
通常在一個進程中可以包含若干個線程,它們可以利用進程所擁有的資源。在引入線程的操作系統中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。由于線程比進程更小,基本上不擁有系統資源,故對它的調度所付出的開銷就會小得多,能更高效的提高系統內多個程序間并發執行的程度,從而顯著提高系統資源的利用率和吞吐量。因而近年來推出的通用操作系統都引入了線程,以便進一步提高系統的并發性,并把它視為現代操作系統的一個重要指標。
線程與進程的區別可以歸納為以下4點:
(1)進程是資源的分配和調度的一個獨立單元,而線程是CPU調度的基本單元
(2)同一個進程中可以包括多個線程,并且線程共享整個進程的資源(寄存器、堆棧、上下文),一個進行至少包括一個線程。
(3)進程的創建調用fork或者vfork,而線程的創建調用pthread_create,進程結束后它擁有的所有線程都將銷毀,而線程的結束不會影響同個進程中的其他線程的結束
(4)線程是輕量級的進程,它的創建和銷毀所需要的時間比進程小很多,所有操作系統中的執行功能都是創建線程去完成的
(5)線程中執行時一般都要進行同步和互斥,因為他們共享同一進程的所有資源
(6)線程有自己的私有屬性TCB,線程id,寄存器、硬件上下文,而進程也有自己的私有屬性進程控制塊PCB,這些私有屬性是不被共享的,用來標示一個進程或一個線程的標志
三、進程間通信方式
1、管道(Pipe)及有名管道(named pipe):管道可用于具有親緣關系進程間的通信,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關系進程間的通信;
2、信號(Signal):信號是比較復雜的通信方式,用于通知接受進程有某種事件發生,除了用于進程間通信外,進程還可以發送信號給進程本身;linux除了支持Unix早期信號語義函數sigal外,還支持語義符合Posix.1標準的信號函數sigaction(實際上,該函數是基于BSD的,BSD為了實現可靠信號機制,又能夠統一對外接口,用sigaction函數重新實現了signal函數);
3、報文(Message)隊列(消息隊列):消息隊列是消息的鏈接表,包括Posix消息隊列system V消息隊列。有足夠權限的進程可以向隊列中添加消息,被賦予讀權限的進程則可以讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節流以及緩沖區大小受限等缺點。
4、共享內存:使得多個進程可以訪問同一塊內存空間,是最快的可用IPC形式。是針對其他通信機制運行效率較低而設計的。往往與其它通信機制,如信號量結合使用,來達到進程間的同步及互斥。
信號量(semaphore):主要作為進程間以及同一進程不同線程之間的同步手段。
5、套接口(Socket):更為一般的進程間通信機制,可用于不同機器之間的進程間通信。起初是由Unix系統的BSD分支開發出來的,但現在一般可以移植到其它類Unix系統上:Linux和System V的變種都支持套接字。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。