成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于PCNTl擴(kuò)展的PHP多進(jìn)程管理庫(kù)

王巖威 / 1916人閱讀

摘要:子進(jìn)程得到的為所以這里是子進(jìn)程執(zhí)行的邏輯。最后再次附上項(xiàng)目地址歡迎

大多數(shù)人都說php是單進(jìn)程執(zhí)行的,其實(shí)這是不準(zhǔn)確的,在cli模式下php是可以做到多進(jìn)程的;不過需要pcntl的擴(kuò)展;

$pid = pcntl_fork();
//父進(jìn)程和子進(jìn)程都會(huì)執(zhí)行下面代碼
if ($pid == -1) {
    //錯(cuò)誤處理:創(chuàng)建子進(jìn)程失敗時(shí)返回-1.
     die("could not fork");
} else if ($pid) {
     //父進(jìn)程會(huì)得到子進(jìn)程號(hào),所以這里是父進(jìn)程執(zhí)行的邏輯
     pcntl_wait($status); //等待子進(jìn)程中斷,防止子進(jìn)程成為僵尸進(jìn)程。
} else {
     //子進(jìn)程得到的$pid為0, 所以這里是子進(jìn)程執(zhí)行的邏輯。
}

上面的代碼摘自php官方手冊(cè),熟悉C語(yǔ)言的同學(xué)可能很吃驚,簡(jiǎn)直跟c的api是一毛一樣的;確實(shí)是這樣,一樣直白,一樣沒有包裝;現(xiàn)在這種問題得到解決了;先附上鏈接https://github.com/slince/process

通過composer安裝
composer require slince/process
基本用法
//創(chuàng)建子進(jìn)程
$process = new SlinceProcessProcess(function(){
    echo "hello, my pid is " . getmypid();
});
$process->start(); //程序執(zhí)行到此處發(fā)生分裂,下面的代碼在父進(jìn)程執(zhí)行,上面閉包的代碼在子進(jìn)程執(zhí)行

var_dump($process->isRunning()); // 子進(jìn)程是否還在執(zhí)行
var_dump($process->getPid()); // 獲取子進(jìn)程id

//其他業(yè)務(wù)邏輯

$process->wait(); //等待子進(jìn)程執(zhí)行完畢,此過程會(huì)發(fā)生阻塞;不要忘了此步驟

注冊(cè)新號(hào)處理器,以及觸發(fā)新號(hào)

$process = ...
$process->getSignalHandler()->register([SIGUSR1, SIGUSR2], function(){
    echo "trigger signal";
});
$process->start();
$process->signal(SIGUSER1); //給子進(jìn)程發(fā)信號(hào)
$process->wait();

其它IPC包裝

Shared memory
$memory = new SlinceProcessSystemVSharedMemory();
$memory->set("foo", "bar");
var_dump($memory->get("foo"));

The default size of shared memory is the sysvshm.init_mem in the php.ini, otherwise 10000 bytes. You can adjust this.

$memory = new SlinceProcessSystemVSharedMemory(__FILE__, "5M"); //Adjusts to 5m
Semaphore
$semaphore = new SlinceProcessSystemVSemaphore();
$semaphore->acquire(); //Acquires a lock
// do something
$semaphore->release() //Releases a lock
Message queue
$queue  = new SlinceProcessSystemVMessageQueue();
$queue->send("hello");
echo $queue->receive(); //Will output hello
Fifo
$writeFifo = new SlinceProcessPipeWritableFifo("/tmp/test.pipe");
$writeFifo->write("some message");
$readFifo = new SlinceProcessPipeReadableFifo("/tmp/test.pipe");
echo $readFifo->read();

Fifo works with half duplex mode. You can use DuplexFifo that will create two fifos.

$fifo = new SlinceProcessPipeDuplexFifo("/tmp/test.pipe");
$fifo->write("some message");
$fifo->read();

由于pcntl擴(kuò)展在window上是不可用的,所以本庫(kù)并不能在window上使用;如果有需求的化建議使用symfony/process但需要注意的是該庫(kù)只能實(shí)現(xiàn)進(jìn)程間調(diào)用,也就是說你必須先創(chuàng)建一個(gè)腳本命令再調(diào)用該命令,與pcntl擴(kuò)展實(shí)現(xiàn)的并不是同一個(gè)東西。

最后再次附上項(xiàng)目地址https://github.com/slince/process 歡迎star

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25690.html

相關(guān)文章

  • Swoole-2.1.2 進(jìn)程池模塊使用

    摘要:在版本中我們將的進(jìn)程管理模塊封裝成了類,現(xiàn)在可以在代碼中使用的進(jìn)程管理器了。提供的進(jìn)程管理器來(lái)自于,經(jīng)過大量生產(chǎn)項(xiàng)目驗(yàn)證,穩(wěn)定性和健壯性都非常高。三任務(wù)投遞進(jìn)程管理器自帶了消息隊(duì)列和消息投遞的支持。 在Swoole-2.1.2版本中我們將Server的進(jìn)程管理模塊封裝成了PHP類,現(xiàn)在可以在PHP代碼中使用Swoole的進(jìn)程管理器了。 在實(shí)際項(xiàng)目中經(jīng)常需要寫一些長(zhǎng)期運(yùn)行的腳本,如基于r...

    ZoomQuiet 評(píng)論0 收藏0
  • PHPPcntl進(jìn)程擴(kuò)展基礎(chǔ)使用

    摘要:提供了一個(gè)擴(kuò)展,基于的進(jìn)程,系統(tǒng)暫時(shí)沒有這個(gè)擴(kuò)展,用于實(shí)現(xiàn)基礎(chǔ)的多進(jìn)程實(shí)現(xiàn),可以利用這個(gè)處理一個(gè)很耗時(shí)的任務(wù),例如發(fā)訂閱郵件,短信,站內(nèi)信等。如果父進(jìn)程不關(guān)心子進(jìn)程什么時(shí)候結(jié)束子進(jìn)程結(jié)束后,內(nèi)核會(huì)回收。 PHP提供了一個(gè)Pcntl擴(kuò)展,Pcntl基于Linux的進(jìn)程,Windows系統(tǒng)暫時(shí)沒有這個(gè)擴(kuò)展,用于實(shí)現(xiàn)基礎(chǔ)的多進(jìn)程實(shí)現(xiàn),可以利用這個(gè)處理一個(gè)很耗時(shí)的任務(wù),例如發(fā)訂閱郵件,短信,站...

    AprilJ 評(píng)論0 收藏0
  • PHP并發(fā)IO編程之路

    摘要:下文如無(wú)特殊聲明將使用進(jìn)程同時(shí)表示進(jìn)程線程。收到數(shù)據(jù)后服務(wù)器程序進(jìn)行處理然后使用向客戶端發(fā)送響應(yīng)。現(xiàn)在各種高并發(fā)異步的服務(wù)器程序都是基于實(shí)現(xiàn)的,比如。 并發(fā) IO 問題一直是服務(wù)器端編程中的技術(shù)難題,從最早的同步阻塞直接 Fork 進(jìn)程,到 Worker 進(jìn)程池/線程池,到現(xiàn)在的異步IO、協(xié)程。PHP 程序員因?yàn)橛袕?qiáng)大的 LAMP 框架,對(duì)這類底層方面的知識(shí)知之甚少,本文目的就是詳細(xì)介...

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

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

    awokezhou 評(píng)論0 收藏0
  • PHP進(jìn)程系列筆記(五)

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

    qianfeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<