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

資訊專欄INFORMATION COLUMN

基于PCNTl擴展的PHP多進程管理庫

王巖威 / 1907人閱讀

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

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

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

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

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

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

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

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

注冊新號處理器,以及觸發(fā)新號

$process = ...
$process->getSignalHandler()->register([SIGUSR1, SIGUSR2], function(){
    echo "trigger signal";
});
$process->start();
$process->signal(SIGUSER1); //給子進程發(fā)信號
$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擴展在window上是不可用的,所以本庫并不能在window上使用;如果有需求的化建議使用symfony/process但需要注意的是該庫只能實現(xiàn)進程間調(diào)用,也就是說你必須先創(chuàng)建一個腳本命令再調(diào)用該命令,與pcntl擴展實現(xiàn)的并不是同一個東西。

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/25690.html

相關(guān)文章

  • Swoole-2.1.2 進程池模塊使用

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

    ZoomQuiet 評論0 收藏0
  • PHPPcntl進程擴展基礎(chǔ)使用

    摘要:提供了一個擴展,基于的進程,系統(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ā)訂閱郵件,短信,站...

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

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

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

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

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

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

    qianfeng 評論0 收藏0

發(fā)表評論

0條評論

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