国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP的Pcntl多進程擴展基礎(chǔ)使用

AprilJ / 2418人閱讀

摘要:提供了一個擴展,基于的進程,系統(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

相關(guān)文章

  • PHP進程系列筆記(五)

    摘要:消息隊列更常見的用途是主進程分配任務(wù),子進程消費執(zhí)行。子進程前面加了個,這是為了防止父進程還未往消息隊列中加入內(nèi)容直接退出。 前面幾節(jié)都是講解pcntl擴展實現(xiàn)的多進程程序。本節(jié)給大家介紹swoole擴展的swoole_process模塊。 swoole多進程 swoole_process 是swoole提供的進程管理模塊,用來替代PHP的pcntl擴展。 首先,確保安裝的swoole...

    qianfeng 評論0 收藏0
  • 基于PCNTl擴展PHP進程管理庫

    摘要:子進程得到的為所以這里是子進程執(zhí)行的邏輯。最后再次附上項目地址歡迎 大多數(shù)人都說php是單進程執(zhí)行的,其實這是不準確的,在cli模式下php是可以做到多進程的;不過需要pcntl的擴展; $pid = pcntl_fork(); //父進程和子進程都會執(zhí)行下面代碼 if ($pid == -1) { //錯誤處理:創(chuàng)建子進程失敗時返回-1. die(could not...

    王巖威 評論0 收藏0
  • PHP進程編程

    摘要:輸出結(jié)果子進程回收阻塞方式剛剛有么一般我習慣用加上命令來查找運行著的后臺進程。還有一種方法,既可以回收已經(jīng)結(jié)束的子進程,又可以并行。但是這個時候,子進程會被交給號進程,號進程成為了這些子進程的繼父。 使用多進程的優(yōu)點: 1. 使用多進程, 子進程結(jié)束以后, 內(nèi)核會負責回收資源 2. 使用多進程,子進程異常退出不會導(dǎo)致整個進程Thread退出. 父進程還有機會重建流程. ...

    lieeps 評論0 收藏0
  • multi-process-pcntl 基于PCNTLPHP并發(fā)處理 封裝類

    摘要:職場多年下來,技術(shù)也算是逐漸地有些積累,但是更重要的是對自身有了更加合理的人生定位。或許,人生的意義,就在于此處的感悟吧?;诘牟l(fā)處理封裝類。對語言底層擴展的的深度解讀和生產(chǎn)應(yīng)用。函數(shù)官網(wǎng)手冊中對的說明,更細化的需求可以研究深化。 個人聲明 作者:于立(wx/yulichenr) 敬告:聯(lián)系我,請注明來源和來意 本人開發(fā)有很多年了,但是很少整理分享,如今趁著清閑就為大家服務(wù)了,希...

    awokezhou 評論0 收藏0
  • PHP進程系列筆記(一)

    摘要:用于創(chuàng)建子進程。該函數(shù)阻塞當前進程,只到當前進程的一個子進程退出或者收到一個結(jié)束當前進程的信號。注意處需要注意子進程需要防止子進程也進入循環(huán)。如果沒有,最終創(chuàng)建的子進程不只個。 本系列文章將向大家講解pcntl_*系列函數(shù),從而更深入的理解進程相關(guān)知識。 PCNTL在PHP中進程控制支持默認是關(guān)閉的。您需要使用 --enable-pcntl 配置選項重新編譯PHP的 CGI或CLI版本...

    ddongjian0000 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<