ホームページ  >  記事  >  PHPフレームワーク  >  swooleとpcntlの違い

swooleとpcntlの違い

(*-*)浩
(*-*)浩オリジナル
2019-12-12 11:24:182438ブラウズ

swooleとpcntlの違い

PHP のプロセス コントロールは、Unix スタイルのプロセスの作成、プログラムの実行、信号処理、およびプロセスの中断をサポートします。プロセス制御は Web サーバー環境では使用できないため、Web サービス環境で使用すると予期しない結果が発生する可能性があります。 (推奨学習: Swoole Videoチュートリアル

# PCNTLは、信号処理のコールバックメカニズムとしてダニを使用するようになりました。この変更は、「ユーザー ティック」と同じセマンティクスに従います。

declare() ステートメントを使用すると、プログラム内でコールバックの発生を許可する場所を指定できます。これにより、非同期イベント処理のオーバーヘッドを最小限に抑えることができます。 PHP のコンパイル時に pcntl を有効にすると、スクリプトで pcntl が実際に使用されているかどうかに関係なく、常にこのオーバーヘッドが発生します。

1 つの調整は、PHP 4.3.0 より前のすべての pcntl スクリプトを機能させるために、コールバックが許可されると予想される (コードの) セクションでdeclare() を使用するか、新しいグローバル構文を使用することです。スクリプト全体を通して有効です。

注: この拡張機能は Windows プラットフォームでは使用できません。

swoole は、PHP の pcntl に代わるマルチプロセス管理モジュールを追加します。pcntl との違いは次のとおりです:

swoole_process は、pcntl にはないプロセス間通信 swoole_process を提供します. 標準入出力のリダイレクトをサポートします。子プロセスのエコーまたはキーボード入力をリダイレクトして、パイプからデータをフェッチできます。子プロセスは非同期にすることができます

#プロセス間通信 (IPC)

子プロセスと親プロセスはパイプを介して通信し、データを転送できます。マルチプロセスプログラミングではIPCがよく使われますが、PHPのpcntlモジュールではIPC機能が提供されていないため、機能が限定されています。 swoole_process はこれらの関数を提供し、インターフェイスをカプセル化します。プロセス間通信はインターフェースを呼び出すだけで完了します。

$worker_num = 8;
for($i = 0; $i < $worker_num; $i++)
{
    $process = new swoole_process(&#39;callback_function&#39;, $redirect_stdout);
    $pid = $process->start();
    $workers[$pid] = $process;
}
function callback_function(swoole_process $worker)
{
    //echo "Worker: start. PID=".$worker->pid."\n";
    //recv data from master
    $recv = $worker->read();
    echo "From Master: $recv\n";
    //send data to master
    $worker->write("hello master\n");
    sleep(2);
    $worker->exit(0);
}

read/write 2 つのメソッドは、パイプへのデータの読み取りと書き込みです。メインプロセスは、書き込み/読み取りを通じて子プロセスに対してデータの書き込みと読み取りを行うことができます。

以上がswooleとpcntlの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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