ホームページ  >  記事  >  バックエンド開発  >  SimpleFork php マルチプロセス同時実行フレームワーク

SimpleFork php マルチプロセス同時実行フレームワーク

WBOY
WBOYオリジナル
2016-07-30 13:29:401222ブラウズ
SimpleFork
プロジェクトアドレス: https://github.com/huyanping/simple-fork-phpPCNTL拡張に基づくマルチプロセスプロセス同時実行フレームワーク、インターフェースはJavaのThreadとRunnableに似ていますSimpleForkを書く理由
マルチプロセス プログラムの作成は、プロセスのリサイクル、同期、相互排他、通信などの問題を考慮する必要があります。初心者にとって、上記の問題に対処するのは難しいでしょう。 特に信号処理やプロセス通信の分野では問題を避けるのは困難です。 SimpleFork は、JAVA マルチスレッドに似たプロセス制御インターフェイスのセットを提供し、リサイクル、同期、相互排他、通信、その他のソリューションを提供します。開発者はプロセス制御についてあまり考える必要がなく、ビジネス上の問題に集中できます。 概要
composer require jenner/simple_forkrequirepath/to/SimpleFork/autoload.php依存関係
必須
  • ext-pcntlプロセス制御
  • オプション
  • ext-sysvmsgメッセージキュー
  • ext-sysvsem 同期ミューテックス ロック
  • ext -sysvshm共有メモリ
  • 機能
  • プロセスプールを提供
  • ゾンビプロセスのリサイクルを自動的に処理し、ノンブロッキングコールをサポート
  • IPC通信(プロセス通信)を容易にする共有メモリ、System Vメッセージキュー、セマフォロックを提供
  • プロセスを実装するには、ProcessとRunnableの2つのメソッド
  • プロセスの状態をリアルタイムに取得できます
  • すべてのプロセスをシャットダウンする場合や、プロセスのみを停止する場合は、beforeExit()メソッドを登録してオーバーライドし、trueを返して終了することができ、実行を継続する場合は false (シナリオによっては、プロセスはすぐに終了できません)
  • 子プロセスの実行中にリロードをサポートします
  • Notes
  • System V メッセージ キューは、未処理のデータが存在する可能性があるため破棄されません。プログラムが終了します。破棄する必要がある場合は、$queue->remove() メソッドを呼び出してキューを削除してください
  • 共有メモリは、すべてのプロセスが終了した後に削除されます
  • セマフォ オブジェクトは、オブジェクトがリサイクルされるときに破棄されます
  • プロセスプール start() の後、wait() を呼び出す必要があります。ゾンビプロセスをリサイクルするためにノンブロッキングで呼び出すことができます
  • プロセスステータスを取得する (isAlive() メソッドを呼び出す) 前に、ノンブロッキングメソッドを呼び出すことが最善です。リサイクルの場合は wait(false) を使用します。プロセスの実行ステータスの判断はアトミックな操作ではないため、isAlive() メソッドは実際のステータスと完全に一致していることを保証しません。プログラムの先頭にdeclare(ticks=1); を追加する必要がある場合は、デフォルトでこのステートメントを最初の行に追加することをお勧めします。
  • declare(ticks=1);の使い方
    declare(ticks=1); この宣言はプロセス信号の処理に使用されます。シグナル ハンドラーが登録されている場合、プログラムはコード行を実行する前に、未処理のシグナルがあるかどうかを自動的にチェックします。 http://php.net/manual/zh/control- Structures.declare.php
  • TODO
  •  提供更多功能的进程池,模仿java
  •  提供第三方进程通信机制(Redis等)
  •  更多的测试及示例程序
  • 示例程序
    更多示例程序见exmples目录simple.phpclassTestRunnableextends\Jenner\SimpleFork\Runnable{/** * 进程执行入口 * @return mixed */publicfunctionrun() {echo"I am a sub process".PHP_EOL; }}$process=new\Jenner\SimpleFork\Process(newTestRunnable());$process->start();shared_memory.phpclassProducerextends\Jenner\SimpleFork\Process{publicfunctionrun(){for($i=0; $i<10; $i++){$this->cache->set($i, $i);echo"set {$i} : {$i}".PHH_EOL; } }}classWorkerextends\Jenner\SimpleFork\Process{publicfunctionrun(){sleep(5);for($i=0; $i<10; $i++){echo"get {$i} : ".$this->cache->get($i) .PHP_EOL; } }}$memory=new\Jenner\SimpleFork\IPC\SharedMemory();$producer=newProducer();$producer->setCache($memory);$worker=newWorker();$worker->setCache($memory);$pool=new\Jenner\SimpleFork\Pool();$pool->submit($producer);$pool->submit($worker);$pool->start();$pool->wait();

    原创文章,转载请注明: 转载自始终不够

    本文链接地址: SimpleFork php多进程并发框架

    转载请注明:始终不够 ? SimpleFork php多进程并发框架

    以上就介绍了SimpleFork php多进程并发框架,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。