PCNTl拡張に基づくPHPマルチプロセス管理ライブラリ
多くの人はphpが単一プロセスで実行されていると言っていますが、実はこれは正確ではありません.cliモードではphpはマルチプロセスを行うことができます.しかし、pcntlの拡張が必要です.
上のコードはphpの公式マニュアルから抜粋して、C言語に詳しい学生は驚くかもしれませんが、まるでcのapiと同じです.確かにそうです.同じようにまっすぐで、同じように包装されていません.今、このような問題は解決されました.まずリンクhttps://github.com/slince/processを添付します
composerによるインストール
基本的な使い方
新しいプロセッサを登録し、新しいプロセッサをトリガーします.
その他IPC包装
Shared memory
The default size of shared memory is the sysvshm.init_mem in the php.ini, otherwise 10000 bytes. You can adjust this.
Semaphore
Message queue
Fifo
Fifo works with half duplex mode. You can use
pcntl拡張はwindowでは使用できないため、本ライブラリはwindowでは使用できません.必要な場合はsymfony/processを使用することをお勧めしますが、ライブラリはプロセス間呼び出しのみを実装する必要があります.つまり、pcntl拡張実装とは同じものではなく、スクリプトコマンドを作成してから呼び出さなければなりません.
最後に再びプロジェクトアドレスhttps://github.com/slince/processを添付してstarを歓迎します
$pid = pcntl_fork();
//
if ($pid == -1) {
// : -1.
die('could not fork');
} else if ($pid) {
// ,
pcntl_wait($status); // , 。
} else {
// $pid 0, 。
}
上のコードはphpの公式マニュアルから抜粋して、C言語に詳しい学生は驚くかもしれませんが、まるでcのapiと同じです.確かにそうです.同じようにまっすぐで、同じように包装されていません.今、このような問題は解決されました.まずリンクhttps://github.com/slince/processを添付します
composerによるインストール
composer require slince/process
基本的な使い方
//
$process = new Slince\Process\Process(function(){
echo 'hello, my pid is ' . getmypid();
});
$process->start(); // , ,
var_dump($process->isRunning()); //
var_dump($process->getPid()); // id
//
$process->wait(); // , ;
新しいプロセッサを登録し、新しいプロセッサをトリガーします.
$process = ...
$process->getSignalHandler()->register([SIGUSR1, SIGUSR2], function(){
echo 'trigger signal';
});
$process->start();
$process->signal(SIGUSER1); //
$process->wait();
その他IPC包装
Shared memory
$memory = new Slince\Process\SystemV\SharedMemory();
$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 Slince\Process\SystemV\SharedMemory(__FILE__, '5M'); //Adjusts to 5m
Semaphore
$semaphore = new Slince\Process\SystemV\Semaphore();
$semaphore->acquire(); //Acquires a lock
// do something
$semaphore->release() //Releases a lock
Message queue
$queue = new Slince\Process\SystemV\MessageQueue();
$queue->send('hello');
echo $queue->receive(); //Will output hello
Fifo
$writeFifo = new Slince\Process\Pipe\WritableFifo('/tmp/test.pipe');
$writeFifo->write('some message');
$readFifo = new Slince\Process\Pipe\ReadableFifo('/tmp/test.pipe');
echo $readFifo->read();
Fifo works with half duplex mode. You can use
DuplexFifo
that will create two fifos. $fifo = new Slince\Process\Pipe\DuplexFifo('/tmp/test.pipe');
$fifo->write('some message');
$fifo->read();
pcntl拡張はwindowでは使用できないため、本ライブラリはwindowでは使用できません.必要な場合はsymfony/processを使用することをお勧めしますが、ライブラリはプロセス間呼び出しのみを実装する必要があります.つまり、pcntl拡張実装とは同じものではなく、スクリプトコマンドを作成してから呼び出さなければなりません.
最後に再びプロジェクトアドレスhttps://github.com/slince/processを添付してstarを歓迎します