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