成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Swoole 啟動(dòng)一個(gè)服務(wù),開啟了哪些進(jìn)程和線程?

KunMinX / 3828人閱讀

摘要:概述啟動(dòng)一個(gè)服務(wù),開啟了哪些進(jìn)程和線程為了解決這個(gè)問題,咱們啟動(dòng)一個(gè)最簡(jiǎn)單的服務(wù),一起看看究竟啟動(dòng)了哪些進(jìn)程和線程然后結(jié)合官網(wǎng)運(yùn)行流程圖,對(duì)每個(gè)進(jìn)程和線程進(jìn)行歸類?,F(xiàn)在我們了解了,啟動(dòng)的這個(gè)服務(wù)使用了個(gè)進(jìn)程個(gè)線程。

概述

Swoole 啟動(dòng)一個(gè)服務(wù),開啟了哪些進(jìn)程和線程?

為了解決這個(gè)問題,咱們啟動(dòng)一個(gè)最簡(jiǎn)單的服務(wù),一起看看究竟啟動(dòng)了哪些進(jìn)程和線程?

然后結(jié)合官網(wǎng)運(yùn)行流程圖,對(duì)每個(gè)進(jìn)程和線程進(jìn)行歸類。

服務(wù)啟動(dòng)后打印出當(dāng)前 Swoole 版本 和 當(dāng)前 CPU 核數(shù)。

打印 Swoole 版本,是讓大家可以下載這個(gè)版本 去運(yùn)行代碼。

打印 CPU 核數(shù),是因?yàn)檫@個(gè)參數(shù)下面會(huì)用到。

廢話不多說,直接看代碼吧。

代碼

serv.php

serv = new swoole_server("0.0.0.0", 9502);
        $this->serv->set([
            "worker_num"      => 3,
            "task_worker_num" => 3,
        ]);
        $this->serv->on("Start", function ($serv) {
            echo "SWOOLE:".SWOOLE_VERSION . " 服務(wù)已啟動(dòng)".PHP_EOL;
            echo "SWOOLE_CPU_NUM:".swoole_cpu_num().PHP_EOL;
        });
        $this->serv->on("Receive", function ($serv, $fd, $from_id, $data) { });
        $this->serv->on("Task", function ($serv, $task) { });
        $this->serv->on("Finish", function ($serv, $task_id, $data) {});
        $this->serv->start();
    }
}
$server = new Server();

上面的代碼簡(jiǎn)單說下,創(chuàng)建了一個(gè) TCP 服務(wù)器,啟動(dòng)了 3 個(gè) worker 進(jìn)程, 3 個(gè) task 進(jìn)程,因?yàn)閱⒂昧?task 功能,所以必須注冊(cè) onTask、onFinish 2 個(gè)事件的回調(diào)函數(shù)。

咱們運(yùn)行一下:

使用 ps 查看下:

16390 的父進(jìn)程是 16389。

16393、16394、16395、16396、16397、16398 的父進(jìn)程是 16390。

有沒有發(fā)現(xiàn),16391、16392 去哪啦?是不是很奇怪。

再用 pstree 查看下:

出來了吧,16391、16392 是線程 與 16390 進(jìn)程一個(gè)層級(jí)。

現(xiàn)在我們了解了,啟動(dòng)的這個(gè)服務(wù)使用了 8 個(gè)進(jìn)程、2 個(gè)線程。

我們一起看下官方 Swoole Server 的文檔:

https://wiki.swoole.com/wiki/...

看下這張圖:

通過上面的圖,我們可以得到結(jié)論:

16389 是 Master 進(jìn)程。

16390 是 Manager 進(jìn)程。

16391、16392 是 Reactor 線程。

16393、16394、16395、16396、16397、16398 包括 3 個(gè) Worker 進(jìn)程,3 個(gè) Task 進(jìn)程。

小結(jié)

一、為什么是 3 個(gè) Worker 進(jìn)程、3 個(gè) Task 進(jìn)程?

因?yàn)?,在?chuàng)建服務(wù)的時(shí)候我們進(jìn)行了設(shè)置 worker_num = 3, task_worker_num = 3。

worker_num 如果不進(jìn)行設(shè)置,默認(rèn)為 SWOOLE_CPU_NUM,在上面咱們打印出來了,默認(rèn)為 2,最大不超過,SWOOLE_CPU_NUM * 1000,具體詳情,看官方文檔。

worker_num 文檔:

https://wiki.swoole.com/wiki/...

task_worker_num 文檔:

https://wiki.swoole.com/wiki/...

二、為什么是 2 個(gè) Reactor 線程?它是干什么的?

因?yàn)?,Reactor 線程數(shù),默認(rèn)為 SWOOLE_CPU_NUM,也可以通過 reactor_num 參數(shù)進(jìn)行設(shè)置。

reactor_num 文檔:

https://wiki.swoole.com/wiki/...

它是真正處理 TCP 連接,收發(fā)數(shù)據(jù)的線程。

Reactor線程 文檔:

https://wiki.swoole.com/wiki/...

三、Reactor、Worker、TaskWorker 的關(guān)系是什么樣的?

一個(gè)通俗的比喻,假設(shè)Server就是一個(gè)工廠,那Reactor就是銷售,接受客戶訂單。而Worker就是工人,當(dāng)銷售接到訂單后,Worker去工作生產(chǎn)出客戶要的東西。而TaskWorker可以理解為行政人員,可以幫助Worker干些雜事,讓W(xué)orker專心工作。

官方已經(jīng)解釋的很詳細(xì)了,看官方文檔吧:

https://wiki.swoole.com/wiki/...

如果你想入門學(xué)習(xí) Swoole 可以看下這個(gè) 《Swoole 文章匯總(10 篇)》。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31772.html

相關(guān)文章

  • Swoole 源碼分析——Server模塊之Start

    摘要:是緩存區(qū)高水位線,達(dá)到了說明緩沖區(qū)即將滿了創(chuàng)建線程函數(shù)用于將監(jiān)控的存放于中向中添加監(jiān)聽的文件描述符等待所有的線程開啟事件循環(huán)利用創(chuàng)建線程,線程啟動(dòng)函數(shù)是保存監(jiān)聽本函數(shù)將用于監(jiān)聽的存放到當(dāng)中,并設(shè)置相應(yīng)的屬性 Server 的啟動(dòng) 在 server 啟動(dòng)之前,swoole 首先要調(diào)用 php_swoole_register_callback 將 PHP 的回調(diào)函數(shù)注冊(cè)到 server...

    3fuyu 評(píng)論0 收藏0
  • Swoole筆記(五)

    摘要:超過此數(shù)量后,新進(jìn)入的連接將被拒絕。表示連接最大允許空閑的時(shí)間。當(dāng)出錯(cuò)時(shí)底層會(huì)認(rèn)為是惡意連接,丟棄數(shù)據(jù)并強(qiáng)制關(guān)閉連接。在啟動(dòng)時(shí)自動(dòng)將進(jìn)程的寫入到文件,在關(guān)閉時(shí)自動(dòng)刪除文件。 配置說明 $server->set(array( daemonize => true, log_file => /www/log/swoole.log, reactor_num => 2, ...

    zgbgx 評(píng)論0 收藏0
  • swoole進(jìn)程結(jié)構(gòu)

    摘要:管理進(jìn)程會(huì)監(jiān)視所有子進(jìn)程的退出事件,當(dāng)進(jìn)程發(fā)生致命錯(cuò)誤或者運(yùn)行生命周期結(jié)束時(shí),管理進(jìn)程會(huì)回收此進(jìn)程,并創(chuàng)建新的進(jìn)程。換句話也就是說,對(duì)于進(jìn)程的創(chuàng)建回收等操作全權(quán)有保姆進(jìn)程進(jìn)行管理。跟的交互請(qǐng)求到達(dá)實(shí)際上是與進(jìn)程中的某個(gè)線程發(fā)生了連接。 showImg(https://segmentfault.com/img/bVbrhb2?w=600&h=360); 一、進(jìn)程的基本知識(shí) 什么是進(jìn)程,所...

    546669204 評(píng)論0 收藏0
  • think-swoole 3.0入門教程(thinkphp 6.0)

    摘要:前言即將迎來最新版本,針對(duì)目前越來越流行,也推出了最新的擴(kuò)展安裝由于目前沒有穩(wěn)定版本,所以只能安裝開發(fā)板接下來安裝,目前最新的穩(wěn)定版本是配置安裝結(jié)束可以根據(jù)自己的需求對(duì)配置信息進(jìn)行修改。 前言 ThinkPHP即將迎來最新版本6.0,針對(duì)目前越來越流行Swoole,thinkphp也推出了最新的擴(kuò)展think-swoole 3.0 安裝 由于目前thinkphp 6.0沒有穩(wěn)定版本,所...

    Bamboy 評(píng)論0 收藏0
  • swoole——從入門到放棄(一)

    摘要:進(jìn)程可以使用函數(shù)向進(jìn)程投遞新的任務(wù)。當(dāng)前的進(jìn)程在調(diào)用回調(diào)函數(shù)時(shí)會(huì)將進(jìn)程狀態(tài)切換為忙碌,這時(shí)將不再接收新的,當(dāng)函數(shù)返回時(shí)會(huì)將進(jìn)程狀態(tài)切換為空閑然后繼續(xù)接收新的。當(dāng)進(jìn)程投遞的任務(wù)在中完成時(shí),進(jìn)程會(huì)通過方法將任務(wù)處理的結(jié)果發(fā)送給進(jìn)程。 swoole——從入門到放棄(一) 一、swoole的源碼包安裝 下載swoole源碼:git clone https://gitee.com/swoole...

    morgan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<