目錄swoole 啟動乙個服務,開啟了哪些程序和執行緒?
為了解決這個問題,咱們啟動乙個最簡單的服務,一起看看究竟啟動了哪些程序和執行緒?
然後結合官網執行流程圖,對每個程序和執行緒進行歸類。
服務啟動後列印出當前 swoole 版本 和 當前 cpu 核數。
列印 cpu 核數,是因為這個引數下面會用到。
廢話不多說,直接看**吧。
serv.php
<?php
class server
); $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();
上面的**簡單說下,建立了乙個 tcp 伺服器,啟動了 3 個 worker 程序, 3 個 task 程序,因為啟用了 task 功能,所以必須註冊 ontask、onfinish 2 個事件的**函式。
咱們執行一下:
使用 ps 檢視下:
16390 的父程序是 16389。
16393、16394、16395、16396、16397、16398 的父程序是 16390。
有沒有發現,16391、16392 去哪啦?是不是很奇怪。
再用 pstree 檢視下:
出來了吧,16391、16392 是執行緒 與 16390 程序乙個層級。
現在我們了解了,啟動的這個服務使用了 8 個程序、2 個執行緒。
我們一起看下官方 swoole server 的文件:
看下這張圖:
通過上面的圖,我們可以得到結論:
16389 是 master 程序。
16390 是 manager 程序。
16391、16392 是 reactor 執行緒。
16393、16394、16395、16396、16397、16398 包括 3 個 worker 程序,3 個 task 程序。
一、為什麼是 3 個 worker 程序、3 個 task 程序?
因為,在建立服務的時候我們進行了設定 worker_num = 3, task_worker_num = 3。
worker_num 如果不進行設定,預設為 swoole_cpu_num,在上面咱們列印出來了,預設為 2,最大不超過,swoole_cpu_num * 1000,具體詳情,看官方文件。
worker_num 文件:
task_worker_num 文件:
二、為什麼是 2 個 reactor 執行緒?它是幹什麼的?
因為,reactor 執行緒數,預設為 swoole_cpu_num,也可以通過 reactor_num 引數進行設定。
reactor_num 文件:
它是真正處理 tcp 連線,收發資料的執行緒。
reactor執行緒 文件:
三、reactor、worker、taskworker 的關係是什麼樣的?
乙個通俗的比喻,假設server就是乙個工廠,那reactor就是銷售,接受客戶訂單。而worker就是工人,當銷售接到訂單後,worker去工作生產出客戶要的東西。而taskworker可以理解為行政人員,可以幫助worker幹些雜事,讓worker專心工作。官方已經解釋的很詳細了,看官方文件吧:
如果你想學習 swoole 可以看下這個 《swoole 文章彙總(10 篇)》。
docker 啟動乙個mysql服務
目錄 一 pull官方映象 二 檢視映象 三 執行容器 開啟mysql服務 四 如何登陸到客戶端 選擇乙個指定的版本,或者直接拉去最新的mysql版本。docker pull mysqldocker images docker images repository tag image id creat...
使用http server開啟乙個本地伺服器
在寫前端頁面中,經常會在瀏覽器執行html頁面,從本地資料夾中直接開啟的一般都是file協議,當 中存在http或https的鏈結時,html頁面就無法正常開啟,為了解決這種情況,需要在在本地開啟乙個本地的伺服器。本文是利用node.js中的http server,開啟本地服務,步驟如下 在終端輸入...
使用java啟動notepad開啟乙個文字檔案
老有人問,其實很簡單的,就一行 process p1 runtime.getruntime exec notepad d 1234.txt process p2 runtime.getruntime exec cmd c notepad d 1234.txt process p3 runtime.g...