swoole_process
Swoole\Process
swoole_process::__construct(callable $function, $redirect_stdin_stdout = false, $create_pipe = true);
php
$function
:子進程建立成功後要執行的函數$redirect_stdin_stdout
:重定向子進程的標準輸入和輸出。啓用此選項後,在子進程內輸出內容將不是打印屏幕,而是寫入到主進程管道。讀取鍵盤輸入將變爲從管道中讀取數據。默認爲阻塞讀取。$create_pipe
:是否建立管道,啓用$redirect_stdin_stdout
後,此選項將忽略用戶參數,強制爲true
。若是子進程內沒有進程間通訊,能夠設置爲 false
bool swoole_process->exec(string $execfile, array $args)
redis
$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
參數能夠指定是否阻塞等待,默認爲阻塞false
process
小實例
$process = new Swoole\process(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)
swoole
$size
參數指定表格的最大行數,若是不是2的N次方,底層會自動調整爲一個接近的數字,若是小於1024,默認爲1024bool 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中是否存在某一個keybool 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);
協程能夠理解爲純用戶態的線程,其經過 協做而不是搶佔來進行切換。相對於進程或者線程,協程全部的操做均可以在用戶態完成,建立和切換的消耗更低。
優點:併發
協程操做redis實例
$http = new swoole_http_server('0.0.0.0', 9501); $http->on('request', function ($request, $response) { $redis = new Swoole\Coroutine\Redis(); $redis->connect('0.0.0.0', 6379); $rtn = $redis->get($request->get['a']); $response->header('Content-Type', 'text/plain'); $response->end($rtn); }); $http->start();