摘要:從入門到放棄三一進程子進程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進程的標(biāo)準輸入和輸出。默認為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項將忽略用戶參數(shù),強制為。
swoole——從入門到放棄(三) 一、進程
swoole_process SwooleProcess
swoole_process::__construct(callable $function, $redirect_stdin_stdout = false, $create_pipe = true);
$function:子進程創(chuàng)建成功后要執(zhí)行的函數(shù)
$redirect_stdin_stdout:重定向子進程的標(biāo)準輸入和輸出。啟用此選項后,在子進程內(nèi)輸出內(nèi)容將不是打印屏幕,而是寫入到主進程管道。讀取鍵盤輸入將變?yōu)閺墓艿乐凶x取數(shù)據(jù)。默認為阻塞讀取。
$create_pipe:是否創(chuàng)建管道,啟用$redirect_stdin_stdout后,此選項將忽略用戶參數(shù),強制為true。如果子進程內(nèi)沒有進程間通信,可以設(shè)置為 false
bool swoole_process->exec(string $execfile, array $args)
$execfile指定可執(zhí)行文件的絕對路徑,如 "/usr/bin/php"
$args是一個數(shù)組,是exec的參數(shù)列表,如 array("test.php", 123),相當(dāng)與php test.php 123
function swoole_process->start() : int:執(zhí)行fork系統(tǒng)調(diào)用,啟動進程
array swoole_process::wait(bool $blocking = true);:回收結(jié)束運行的子進程
$result = array("code" => 0, "pid" => 15001, "signal" => 15);
$blocking 參數(shù)可以指定是否阻塞等待,默認為阻塞
操作成功會返回一個數(shù)組包含子進程的PID、退出狀態(tài)碼、被哪種信號KILL
失敗返回false
process小實例
$process = new Swooleprocess(function (swoole_process $pro) { // 子進程啟用http服務(wù) $pro->exec("/opt/soft/php/bin/php", [__DIR__ . "/../http/http.php"]); }, true); $pid = $process->start(); echo $pid . PHP_EOL; // 回收進程 $process->wait();二、內(nèi)存
swoole_table一個基于共享內(nèi)存和鎖實現(xiàn)的超高性能,并發(fā)數(shù)據(jù)結(jié)構(gòu)。用于解決多進程/多線程數(shù)據(jù)共享和同步加鎖問題。
swoole_table->__construct(int $size, float $conflict_proportion = 0.2)
$size參數(shù)指定表格的最大行數(shù),如果不是2的N次方,底層會自動調(diào)整為一個接近的數(shù)字,如果小于1024,默認為1024
bool swoole_table->column(string $name, int $type, int $size = 0);內(nèi)存表增加一列
$name指定字段的名稱
$type指定字段類型:swoole_table::TYPE_INT,swoole_table::TYPE_FLOAT,swoole_table::TYPE_STRING
$size字符串必須指定長度
function swoole_table->create() : bool;創(chuàng)建內(nèi)存表
swoole_table->set(string $key, array $value)
$key相同的key會覆蓋
$value必須是一個數(shù)組
function swoole_table->incr(string $key, string $column, mixed $incrby = 1);原子自增操作
function swoole_table->decr(string $key, string $column, mixed $decrby = 1);原子自減操作
array swoole_table->get(string $key, string $field = null);獲取一行數(shù)據(jù)
bool swoole_table->exist(string $key);檢查table中是否存在某一個key
bool swoole_table->del(string $key)刪除數(shù)據(jù)
int function swoole_table->count();返回table中存在的條目數(shù)
swoole_table簡單的CURD實例
$table = new swoole_table(1024); $table->column("id", swoole_table::TYPE_INT); $table->column("name", swoole_table::TYPE_STRING, 16); $table->column("age", swoole_table::TYPE_INT); $table->create(); // 第一種設(shè)置、獲取方式 $table->set("ronaldo", ["id" => 1, "name" => "ronaldo", "age" => 32]); $table->incr("ronaldo", "age", 2); // 原子自增 $rtn1 = $table->get("ronaldo"); print_r($rtn1); // 第二種設(shè)置、獲取方式 $table["ronaldo2"] = ["id" => 2, "name" => "ronaldo2", "age" => 28]; $table->decr("ronaldo2", "age", 2); // 原子自減 $table->del("ronaldo"); // 刪除列 $rtn2 = $table["ronaldo2"]; print_r($table["ronaldo"]); print_r($rtn2);三、協(xié)程
協(xié)程可以理解為純用戶態(tài)的線程,其通過協(xié)作而不是搶占來進行切換。相對于進程或者線程,協(xié)程所有的操作都可以在用戶態(tài)完成,創(chuàng)建和切換的消耗更低。
優(yōu)勢:
開發(fā)者可以無感知的用同步的代碼編寫方式達到異步IO的效果和性能,避免了傳統(tǒng)異步回調(diào)所帶來的離散的代碼邏輯和陷入多層回調(diào)中導(dǎo)致代碼無法維護。
同時由于swoole是在底層封裝了協(xié)程,所以對比傳統(tǒng)的php層協(xié)程框架,開發(fā)者不需要使用yield關(guān)鍵詞來標(biāo)識一個協(xié)程IO操作,所以不再需要對yield的語義進行深入理解以及對每一級的調(diào)用都修改為yield,這極大的提高了開發(fā)效率。
協(xié)程操作redis實例
$http = new swoole_http_server("0.0.0.0", 9501); $http->on("request", function ($request, $response) { $redis = new SwooleCoroutineRedis(); $redis->connect("0.0.0.0", 6379); $rtn = $redis->get($request->get["a"]); $response->header("Content-Type", "text/plain"); $response->end($rtn); }); $http->start();
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39961.html
摘要:從入門到放棄三一進程子進程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進程的標(biāo)準輸入和輸出。默認為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項將忽略用戶參數(shù),強制為。 swoole——從入門到放棄(三) 一、進程 swoole_process SwooleProcess swoole_process::__construct(callable $function, $redirect_stdin...
摘要:從入門到放棄二一異步毫秒定時器設(shè)置一個間隔時鐘定時器,與定時器不同的是定時器會持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會銷毀最大不超過使用定時器來刪除定時器。 swoole——從入門到放棄(二) 一、異步毫秒定時器 swoole_timer_tick:設(shè)置一個間隔時鐘定時器,與after定時器不同的是tick定時器會持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清...
摘要:從入門到放棄二一異步毫秒定時器設(shè)置一個間隔時鐘定時器,與定時器不同的是定時器會持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會銷毀最大不超過使用定時器來刪除定時器。 swoole——從入門到放棄(二) 一、異步毫秒定時器 swoole_timer_tick:設(shè)置一個間隔時鐘定時器,與after定時器不同的是tick定時器會持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清...
摘要:進程可以使用函數(shù)向進程投遞新的任務(wù)。當(dāng)前的進程在調(diào)用回調(diào)函數(shù)時會將進程狀態(tài)切換為忙碌,這時將不再接收新的,當(dāng)函數(shù)返回時會將進程狀態(tài)切換為空閑然后繼續(xù)接收新的。當(dāng)進程投遞的任務(wù)在中完成時,進程會通過方法將任務(wù)處理的結(jié)果發(fā)送給進程。 swoole——從入門到放棄(一) 一、swoole的源碼包安裝 下載swoole源碼:git clone https://gitee.com/swoole...
閱讀 2116·2023-04-25 17:23
閱讀 2925·2021-11-17 09:33
閱讀 2521·2021-08-21 14:09
閱讀 3614·2019-08-30 15:56
閱讀 2614·2019-08-30 15:54
閱讀 1635·2019-08-30 15:53
閱讀 2138·2019-08-29 13:53
閱讀 1154·2019-08-29 12:31