Swoole 進程相關知識

進程基本概念

狹義定義:進程是正在運行的程序的實例(an instance of a computer program that is being executed)。

對于一個進程來說,它最核心的內容可以分為兩個部分。第一個是它的內存,另一個部分是它的上下文環(huán)境。

在操作系統當中,是可以運行多個進程的。對于一個進程來說,它可以調用系統函數來創(chuàng)建子進程。如下圖所示:

\1.PNG
\1.PNG

需要注意的是:

  • 子進程會復制父進程的內存空間和上下文環(huán)境
  • 修改某個子進程的內存空間,不會修改父進程或其他子進程的內存空間

Swoole本身也是一個多進程的模型,它有多個worker進程和自己的master進程,多個worker進程之間創(chuàng)建的變量是不會通用的。

進程間通訊

進程間通訊的方式有很多種,其中一種是共享內存。共享內存是操作系統當中一種比較特殊的內存,它并不屬于任何進程,也不需要依賴于進程而存在。可以調用系統函數來創(chuàng)建一片共享內存,并指定它的索引,通過索引,任何一個進程都可以在這片內存空間申請內存空間并在儲存一定值。

要點:

  • 共享內存不屬于任何一個進程
  • 在共享內存中分配的內存空間可以被任何進程訪問
  • 即使進程關閉,共享內存仍然可以繼續(xù)保留

提示:可以使用命令ipcs -m來查看共享內存

Swoole 結構

在過去用PHP寫web應用,是需要依賴于nginx這樣的web服務器和php-fpm解析的。php-fpm同樣也是一個多進程的php解析器,當一個請求過來的時候,php-fpm會創(chuàng)建一個新的進程來處理這個請求,這樣很大程度上系統開銷是用于創(chuàng)建和銷毀進程,導致整個程序的響應效率并不是非常的高。swoole和php-fpm采用了完全不同的架構,如下圖所示:

\2.PNG
\2.PNG

整個swoole擴展可分為三層。第一層master進程,這個進程是swoole的主進程。這個進程是用于處理swoole核心的時間驅動的。在這個進程當中擁有若干個reactor線程,在每一個子線程當中都運行了epoll函數的實例,swoole所有的對于事件的監(jiān)聽都會在這些線程當中實現。
第二層是manager進程,這是一個管理進程,用于創(chuàng)建管理下一次的woker進程和task worker進程。
第三層是工作進程,分為兩個類型,一類是worker進程,這是主邏輯進程,用于處理來自客戶端的請求。另一類是task worker進程,是異步工作進程,主要用于處理一些耗時較長的同步任務。

整個響應的流程如下:
當一個新的客戶端連接來到時,首先會被main reactor接收到,然后將這個連接的讀寫操作監(jiān)聽注冊到對應的reactor線程當中,并通知worker進程處理對應onConnect的回調。
當客戶端發(fā)送數據之后,reactor線程會收到這些數據,并通過管道發(fā)送給worker進行處理。
worker進程如果需要投遞任務,它就會通過管道或者消息隊列(可以配置)發(fā)送給task worker進程。task worker進程處理完成之后,返回給worker,worker通知reactor線程發(fā)送數據給客戶端。
當worker進程出現意外,或者處理一定次數的請求關閉后,manager進程會重新創(chuàng)建一個新的worker進程,保證整個系統當中worker進程的數目是固定的。


參考網站:

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

相關閱讀更多精彩內容

  • 前文再續(xù),就書接上一回,隨著與Server、TCP、Protocol的邂逅,Swoole終于迎來了自己的故事,今天...
    蝸牛淋雨閱讀 1,900評論 1 14
  • 原文鏈接:http://rango.swoole.com/archives/508 一、引言 并發(fā)IO問題一直是服...
    林灣村龍貓閱讀 1,800評論 2 14
  • 前言 前文再續(xù),就書接上一回,隨著與Server、TCP、Protocol的邂逅,Swoole終于迎來了自己的故事...
    零一間閱讀 5,376評論 0 17
  • 我沒有必要每次都要珍惜她所丟棄的東西 哪怕是撿起 都不會 難道只因為我曾付出過真心 就活該被感情所傷害? 我和她沒...
    王瀟灑Yo閱讀 458評論 0 3
  • 白日不敢念及的名字 夜晚用星空拼砌 夢里沒有顏色的花朵 香味已飄向千里 請你一定要相信 如果我偶然說起了愛你 因為...
    菜梗不吃小姐閱讀 223評論 2 3

友情鏈接更多精彩內容