時(shí)間:2023-05-26 19:39:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-05-26 19:39:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)
PHP是怎么操作多進(jìn)程的:在以往的開(kāi)發(fā)項(xiàng)目中,要操作進(jìn)程就會(huì)使用PHP自帶的pcntl拓展。但是pcntl存在著許多的不足:
PHP
的pcntl
;安裝PHP_swoole拓展;
$data
的長(zhǎng)度在Linux
系統(tǒng)下最大不超過(guò)8K
,MacOS/FreeBSD
下最大不超過(guò)2K
/** 創(chuàng)建子進(jìn)程,將數(shù)據(jù)寫(xiě)入管道,然后啟動(dòng)子進(jìn)程 */$process = new /swoole_process([$this, 'sonProcessWork']);$process->write(json_encode($data_pop));$pid = $process->start();
swoole_event_add(): 將一個(gè)socket加入到底層的reactor
事件監(jiān)聽(tīng)中;在子進(jìn)程中處理一些耗時(shí)的計(jì)算或者操作;/** 獲取管道的業(yè)務(wù)數(shù)據(jù),進(jìn)行相關(guān)的操作 */public function sonProcessWork(/swoole_process $worker){ $GLOBALS['worker'] = $worker; swoole_event_add($worker->pipe, function($pipe) { /******start*你的業(yè)務(wù)邏輯 *******/ ..... /******end*你的業(yè)務(wù)邏輯 *******/ $worker->exit(0); })}
wait(false)/** 根據(jù)信號(hào)處理紫禁城 */private function sig_handler($signo) { Process::signal(SIGCHLD, function($sig) { //必須為false,非阻塞模式 while($ret = Process::wait(false)) { echo "PID={$ret['pid']}/n"; }});}
以上就是php_swoole 對(duì)進(jìn)程的基本操作,在實(shí)際開(kāi)發(fā)過(guò)程中,業(yè)務(wù)會(huì)比較復(fù)雜;我們應(yīng)當(dāng)配合隊(duì)列來(lái)進(jìn)行使用。關(guān)鍵詞:進(jìn)程,操作
客戶&案例
營(yíng)銷(xiāo)資訊
關(guān)于我們
客戶&案例
營(yíng)銷(xiāo)資訊
關(guān)于我們
微信公眾號(hào)
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。