国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

swoole進程結構

546669204 / 2049人閱讀

摘要:管理進程會監視所有子進程的退出事件,當進程發生致命錯誤或者運行生命周期結束時,管理進程會回收此進程,并創建新的進程。換句話也就是說,對于進程的創建回收等操作全權有保姆進程進行管理。跟的交互請求到達實際上是與進程中的某個線程發生了連接。

一、進程的基本知識

什么是進程,所謂進程其實就是操作系統中一個正在運行的程序,我們在一個終端當中,通過php,運行一個php文件,這個時候就相當于我們創建了一個進程,這個進程會在系統中駐存,申請屬于它自己的內存空間系統資源并且運行相應的程序

對于一個進程來說,它的核心內容分為兩個部分,一個是它的內存,這個內存是這進程創建之初從系統分配的,它所有創建的變量都會存儲在這一片內存環境當中

一個是它的上下文環境我們知道進程是運行在操作系統的,那么對于程序來說,它的運行依賴操作系統分配給它的資源,操作系統的一些狀態。

在操作系統中可以運行多個進程的,對于一個進程來說,它可以創建自己的子進程,那么當我們在一個進程中創建出若干個子進程的時候那么可以看到如圖,子進程和父進程一樣,擁有自己的內存空間和上下文環境

二、Swoole進程結構

Swoole的高效不僅僅于底層使用c編寫,他的進程結構模型也使其可以高效的處理業務,我們想要深入學習,并且在實際的場景當中使用必須了解,下面我們先看一下結構圖:

首先先介紹下swoole的這幾種進程分別是干什么的:

從這些層級的名字,我們先大概說一下,下面這些層級分別是干什么的,做一個詳細的說明。

Master進程:主進程

Manger進程:管理進程

Worker進程:工作進程

Task進程:異步任務工作進程

1、Master進程

第一層,Master進程,這個是swoole的主進程,這個進程是用于處理swoole的核心事件驅動的,那么在這個進程當中可以看到它擁有一個MainReactor[線程]以及若干個Reactor[線程],swoole所有對于事件的監聽都會在這些線程中實現,比如來自客戶端的連接,信號處理等。

每一個線程都有自己的用途,下面多每個線程有一個了解

MainReactor(主線程)

主線程會負責監聽server socket,如果有新的連接accept,主線程會評估每個Reactor線程的連接數量。將此連接分配給連接數最少的reactor線程,做一個負載均衡。

Reactor線程組

Reactor線程負責維護客戶端機器的TCP連接、處理網絡IO、收發數據完全是異步非阻塞的模式。
swoole的主線程在Accept新的連接后,會將這個連接分配給一個固定的Reactor線程,在socket可讀時讀取數據,并進行協議解析,將請求投遞到Worker進程。在socket可寫時將數據發送給TCP客戶端。

心跳包檢測線程(HeartbeatCheck)

Swoole配置了心跳檢測之后,心跳包線程會在固定時間內對所有之前在線的連接
發送檢測數據包

UDP收包線程(UdpRecv)

接收并且處理客戶端udp數據包

2、管理進程Manager

Swoole想要實現最好的性能必須創建出多個工作進程幫助處理任務,但Worker進程就必須fork操作,但是fork操作是不安全的,如果沒有管理會出現很多的僵尸進程,進而影響服務器性能,同時worker進程被誤殺或者由于程序的原因會異常退出,為了保證服務的穩定性,需要重新創建worker進程。

Swoole在運行中會創建一個多帶帶的管理進程,所有的worker進程和task進程都是從管理進程Fork出來的。管理進程會監視所有子進程的退出事件,當worker進程發生致命錯誤或者運行生命周期結束時,管理進程會回收此進程,并創建新的進程。換句話也就是說,對于worker、task進程的創建、回收等操作全權有“保姆”Manager進程進行管理。

再來一張圖梳理下Manager進程和Worker/Task進程的關系。

3、Worker進程

worker 進程屬于swoole的主邏輯進程,用戶處理客戶端的一系列請求,接受由Reactor線程投遞的請求數據包,并執行PHP回調函數處理數據生成響應數據并發給Reactor線程,由Reactor線程發送給TCP客戶端可以是異步非阻塞模式,也可以是同步阻塞模式

4、Task進程

taskWorker進程這一進城是swoole提供的異步工作進程,這些進程主要用于處理一些耗時較長的同步任務,在worker進程當中投遞過來。

三、進程查看及流程梳理

當啟動一個Swoole應用時,一共會創建2 + n + m個進程,2為一個Master進程和一個Manager進程,其中n為Worker進程數。m為TaskWorker進程數。

默認如果不設置,swoole底層會根據當前機器有多少CPU核數,啟動對應數量的Reactor線程和Worker進程。我機器為1核的。Worker為1。

所以現在默認我啟動了1個Master進程,1個Manager進程,和1個worker進程,TaskWorker沒有設置也就是為0,當前server會產生3個進程。

在啟動了server之后,在命令行查看當前產生的進程

這三個進程中,所有進程的根進程,也就是例子中的2123進程,就是所謂的Master進程;而2212進程,則是Manager進程;最后的2321進程,是Worker進程。

client跟server的交互

1、client請求到達 Main Reactor,Client實際上是與Master進程中的某個Reactor線程發生了連接。

2、Main Reactor根據Reactor的情況,將請求注冊給對應的Reactor?(每個Reactor都有epoll。用來監聽客戶端的變化)?

3、客戶端有變化時Reactor將數據交給worker來處理

4、worker處理完畢,通過進程間通信(比如管道、共享內存、消息隊列)發給對應的reactor。?

5、reactor將響應結果發給相應的連接請求處理完成

示意圖:

后續準備

本文是在自己學習Swoole接觸到的一些知識,在初步整理后發送出來,希望能與大家一起學習,文章不足等問題大家可以一起討論學習,歡迎騷擾~~。
后面準備從網絡模型入手更好的理解swoole的實現原理,比較與傳統PHP-FPM工作模式的問題,之前出過一篇關于(一)如何實現一個單進程阻塞的網絡服務器大家可以先了解下,如何一步步演變為多進程master-worker模型。

歡迎大家指正文章問題~

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31249.html

相關文章

  • swoole_table 實現原理剖析

    摘要:受限于的實現,程序無法使用多線程進行編程開發。比如實現一個聊天室程序,用戶在進程中處理,用戶在進程中處理,和如果在同一個,這個在多線程環境中直接用表示,和加到對應的中即可。想要解決這個問題,必須實現一個基于共享內存的數據結構。 Swoole項目從 2012 年推出到現在已經有 5 年的歷史,現在越來越多的互聯網企業使用Swoole來開發各類后臺應用。受限于 PHP 的ZendVM實現,...

    smartlion 評論0 收藏0
  • 了解swoole運行模式,加速laravel應用

    摘要:負責解釋執行文件生成響應,最終返回給,展現至前端。相比于傳統架構,進程模型最大的特點在于其多線程模式處理網絡請求,使得其能輕松應對大量連接。這要求開發人員對于多進程的運行模式有更清晰的認識更容易內存泄露。 一、SwooleSwoole號稱重新定義了PHP,它是一個PHP擴展,使得PHP可以使用異步的方式執行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...

    時飛 評論0 收藏0
  • Swoole-Task:簡單高效的異步任務處理框架

    摘要:地址歡迎提用法示例路由說明對應目錄下的文件中的名稱也必須是繼承對應文件中的的最后必須返回即最后一句等同于啟動后發起請求假定監控的和端口是或者投遞任務到進行處理目錄結構說明具體處理業務邏輯的地方配置文件目錄,根據環境來加載配 Swoole-Task github 地址:https://github.com/luxixing/swoole-task歡迎 star 提 issues Swoo...

    lei___ 評論0 收藏0
  • Swoft 源碼剖析 - Swoole和Swoft的那些事(Task投遞/定時任務篇)

    摘要:作為定時任務的執行者,通過每喚醒自身一次,然后把執行表遍歷一次,挑選當下需要執行的任務,通過投遞出去并更新該任務執行表中的狀態。 作者:bromine鏈接:https://www.jianshu.com/p/b44...來源:簡書著作權歸作者所有,本文已獲得作者授權轉載,并對原文進行了重新的排版。Swoft Github: https://github.com/swoft-clou.....

    vvpvvp 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<