摘要:從入門到放棄三一進(jìn)程子進(jìn)程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進(jìn)程的標(biāo)準(zhǔn)輸入和輸出。默認(rèn)為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項(xiàng)將忽略用戶參數(shù),強(qiáng)制為。
swoole——從入門到放棄(三) 一、進(jìn)程
swoole_process SwooleProcess
swoole_process::__construct(callable $function, $redirect_stdin_stdout = false, $create_pipe = true);
$function:子進(jìn)程創(chuàng)建成功后要執(zhí)行的函數(shù)
$redirect_stdin_stdout:重定向子進(jìn)程的標(biāo)準(zhǔn)輸入和輸出。啟用此選項(xiàng)后,在子進(jìn)程內(nèi)輸出內(nèi)容將不是打印屏幕,而是寫入到主進(jìn)程管道。讀取鍵盤輸入將變?yōu)閺墓艿乐凶x取數(shù)據(jù)。默認(rèn)為阻塞讀取。
$create_pipe:是否創(chuàng)建管道,啟用$redirect_stdin_stdout后,此選項(xiàng)將忽略用戶參數(shù),強(qiáng)制為true。如果子進(jìn)程內(nèi)沒(méi)有進(jìn)程間通信,可以設(shè)置為 false
bool swoole_process->exec(string $execfile, array $args)
$execfile指定可執(zhí)行文件的絕對(duì)路徑,如 "/usr/bin/php"
$args是一個(gè)數(shù)組,是exec的參數(shù)列表,如 array("test.php", 123),相當(dāng)與php test.php 123
function swoole_process->start() : int:執(zhí)行fork系統(tǒng)調(diào)用,啟動(dòng)進(jìn)程
array swoole_process::wait(bool $blocking = true);:回收結(jié)束運(yùn)行的子進(jìn)程
$result = array("code" => 0, "pid" => 15001, "signal" => 15);
$blocking 參數(shù)可以指定是否阻塞等待,默認(rèn)為阻塞
操作成功會(huì)返回一個(gè)數(shù)組包含子進(jìn)程的PID、退出狀態(tài)碼、被哪種信號(hào)KILL
失敗返回false
process小實(shí)例
$process = new Swooleprocess(function (swoole_process $pro) { // 子進(jìn)程啟用http服務(wù) $pro->exec("/opt/soft/php/bin/php", [__DIR__ . "/../http/http.php"]); }, true); $pid = $process->start(); echo $pid . PHP_EOL; // 回收進(jìn)程 $process->wait();二、內(nèi)存
swoole_table一個(gè)基于共享內(nèi)存和鎖實(shí)現(xiàn)的超高性能,并發(fā)數(shù)據(jù)結(jié)構(gòu)。用于解決多進(jìn)程/多線程數(shù)據(jù)共享和同步加鎖問(wèn)題。
swoole_table->__construct(int $size, float $conflict_proportion = 0.2)
$size參數(shù)指定表格的最大行數(shù),如果不是2的N次方,底層會(huì)自動(dòng)調(diào)整為一個(gè)接近的數(shù)字,如果小于1024,默認(rèn)為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字符串必須指定長(zhǎng)度
function swoole_table->create() : bool;創(chuàng)建內(nèi)存表
swoole_table->set(string $key, array $value)
$key相同的key會(huì)覆蓋
$value必須是一個(gè)數(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中是否存在某一個(gè)key
bool swoole_table->del(string $key)刪除數(shù)據(jù)
int function swoole_table->count();返回table中存在的條目數(shù)
swoole_table簡(jiǎn)單的CURD實(shí)例
$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)的線程,其通過(guò)協(xié)作而不是搶占來(lái)進(jìn)行切換。相對(duì)于進(jìn)程或者線程,協(xié)程所有的操作都可以在用戶態(tài)完成,創(chuàng)建和切換的消耗更低。
優(yōu)勢(shì):
開發(fā)者可以無(wú)感知的用同步的代碼編寫方式達(dá)到異步IO的效果和性能,避免了傳統(tǒng)異步回調(diào)所帶來(lái)的離散的代碼邏輯和陷入多層回調(diào)中導(dǎo)致代碼無(wú)法維護(hù)。
同時(shí)由于swoole是在底層封裝了協(xié)程,所以對(duì)比傳統(tǒng)的php層協(xié)程框架,開發(fā)者不需要使用yield關(guān)鍵詞來(lái)標(biāo)識(shí)一個(gè)協(xié)程IO操作,所以不再需要對(duì)yield的語(yǔ)義進(jìn)行深入理解以及對(duì)每一級(jí)的調(diào)用都修改為yield,這極大的提高了開發(fā)效率。
協(xié)程操作redis實(shí)例
$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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/30821.html
摘要:從入門到放棄三一進(jìn)程子進(jìn)程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進(jìn)程的標(biāo)準(zhǔn)輸入和輸出。默認(rèn)為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項(xiàng)將忽略用戶參數(shù),強(qiáng)制為。 swoole——從入門到放棄(三) 一、進(jìn)程 swoole_process SwooleProcess swoole_process::__construct(callable $function, $redirect_stdin...
摘要:從入門到放棄二一異步毫秒定時(shí)器設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與定時(shí)器不同的是定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會(huì)銷毀最大不超過(guò)使用定時(shí)器來(lái)刪除定時(shí)器。 swoole——從入門到放棄(二) 一、異步毫秒定時(shí)器 swoole_timer_tick:設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與after定時(shí)器不同的是tick定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清...
摘要:從入門到放棄二一異步毫秒定時(shí)器設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與定時(shí)器不同的是定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會(huì)銷毀最大不超過(guò)使用定時(shí)器來(lái)刪除定時(shí)器。 swoole——從入門到放棄(二) 一、異步毫秒定時(shí)器 swoole_timer_tick:設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與after定時(shí)器不同的是tick定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清...
摘要:進(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ì)通過(guò)方法將任務(wù)處理的結(jié)果發(fā)送給進(jìn)程。 swoole——從入門到放棄(一) 一、swoole的源碼包安裝 下載swoole源碼:git clone https://gitee.com/swoole...
閱讀 3518·2021-11-25 09:43
閱讀 1273·2021-09-08 09:45
閱讀 2648·2021-09-07 09:59
閱讀 1510·2021-08-09 13:45
閱讀 3354·2019-08-30 15:54
閱讀 700·2019-08-29 18:35
閱讀 518·2019-08-29 17:18
閱讀 1003·2019-08-29 14:10