摘要:提供了一個擴展,基于的進程,系統(tǒng)暫時沒有這個擴展,用于實現(xiàn)基礎(chǔ)的多進程實現(xiàn),可以利用這個處理一個很耗時的任務(wù),例如發(fā)訂閱郵件,短信,站內(nèi)信等。如果父進程不關(guān)心子進程什么時候結(jié)束子進程結(jié)束后,內(nèi)核會回收。
PHP提供了一個Pcntl擴展,Pcntl基于Linux的進程,Windows系統(tǒng)暫時沒有這個擴展,用于實現(xiàn)基礎(chǔ)的多進程實現(xiàn),可以利用這個處理一個很耗時的任務(wù),例如發(fā)訂閱郵件,短信,站內(nèi)信等。
參考鏈接:
http://php.net/manual/zh/ref....
http://php.net/manual/zh/ref....
http://blog.csdn.net/huyanpin...
http://rango.swoole.com/archi...
https://www.lvtao.net/dev/php...
示例代碼:
代碼是基于Laravel 框架的,建議使用此框架來允許這部分代碼。
public function index(Request $request) { pcntl_signal(SIGCHLD, SIG_IGN); //如果父進程不關(guān)心子進程什么時候結(jié)束,子進程結(jié)束后,內(nèi)核會回收。 $max = 8000; $workers = 10; $pids = array(); for($i = 0; $i < $workers; $i++){ $pids[$i] = pcntl_fork(); $pid = posix_getpid(); switch ($pids[$i]) { case -1: echo "fork error : {$i} "; exit; case 0: $param = array( "lastid" => $max / $workers * $i, "maxid" => $max / $workers * ($i+1), ); $this->doSomething($pid, $param); exit; default: break; } } foreach ($pids as $i => $pid) { if($pid) { //父進程會得到子進程號,所以這里是父進程執(zhí)行的邏輯 //如果不需要阻塞進程,而又想得到子進程的退出狀態(tài),則可以注釋掉pcntl_wait($status)語句,或?qū)懗桑? pcntl_wait($status,WNOHANG); //等待子進程中斷,防止子進程成為僵尸進程。 //pcntl_waitpid($pid, $status); } } } // 可以看到那個子進程在處理哪些數(shù)據(jù) public function doSomething($filename, $param) { for ($i = $param["lastid"]; $i < $param["maxid"]; $i++) { $path = "./test/"; if (!is_dir($path)){ mkdir($path, 0777, true); } $content = $i . "|"; $file = $path . $filename . ".txt"; file_put_contents($file, $content, FILE_APPEND); } }
更多建議讀文檔,進程和線程,還有很多內(nèi)容的,需要讀書去學習了
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/30165.html
摘要:消息隊列更常見的用途是主進程分配任務(wù),子進程消費執(zhí)行。子進程前面加了個,這是為了防止父進程還未往消息隊列中加入內(nèi)容直接退出。 前面幾節(jié)都是講解pcntl擴展實現(xiàn)的多進程程序。本節(jié)給大家介紹swoole擴展的swoole_process模塊。 swoole多進程 swoole_process 是swoole提供的進程管理模塊,用來替代PHP的pcntl擴展。 首先,確保安裝的swoole...
摘要:子進程得到的為所以這里是子進程執(zhí)行的邏輯。最后再次附上項目地址歡迎 大多數(shù)人都說php是單進程執(zhí)行的,其實這是不準確的,在cli模式下php是可以做到多進程的;不過需要pcntl的擴展; $pid = pcntl_fork(); //父進程和子進程都會執(zhí)行下面代碼 if ($pid == -1) { //錯誤處理:創(chuàng)建子進程失敗時返回-1. die(could not...
摘要:職場多年下來,技術(shù)也算是逐漸地有些積累,但是更重要的是對自身有了更加合理的人生定位。或許,人生的意義,就在于此處的感悟吧?;诘牟l(fā)處理封裝類。對語言底層擴展的的深度解讀和生產(chǎn)應(yīng)用。函數(shù)官網(wǎng)手冊中對的說明,更細化的需求可以研究深化。 個人聲明 作者:于立(wx/yulichenr) 敬告:聯(lián)系我,請注明來源和來意 本人開發(fā)有很多年了,但是很少整理分享,如今趁著清閑就為大家服務(wù)了,希...
摘要:用于創(chuàng)建子進程。該函數(shù)阻塞當前進程,只到當前進程的一個子進程退出或者收到一個結(jié)束當前進程的信號。注意處需要注意子進程需要防止子進程也進入循環(huán)。如果沒有,最終創(chuàng)建的子進程不只個。 本系列文章將向大家講解pcntl_*系列函數(shù),從而更深入的理解進程相關(guān)知識。 PCNTL在PHP中進程控制支持默認是關(guān)閉的。您需要使用 --enable-pcntl 配置選項重新編譯PHP的 CGI或CLI版本...
閱讀 1293·2021-11-16 11:44
閱讀 3759·2021-10-09 10:01
閱讀 1745·2021-09-24 10:31
閱讀 3833·2021-09-04 16:41
閱讀 2510·2021-08-09 13:45
閱讀 1210·2019-08-30 14:08
閱讀 1776·2019-08-29 18:32
閱讀 1640·2019-08-26 12:12