ホームページ  >  記事  >  バックエンド開発  >  PHPはシングルプロセスですか、それともマルチプロセスですか?

PHPはシングルプロセスですか、それともマルチプロセスですか?

(*-*)浩
(*-*)浩オリジナル
2019-09-29 10:39:315922ブラウズ

PHP マルチプロセス プログラムを記述することは、実際には、いくつかのステップを踏むだけで、象を冷蔵庫に入れるのと同じくらい簡単です。

PHPはシングルプロセスですか、それともマルチプロセスですか?

PHP は、3 つの簡単な手順でマルチプロセスを実装します。サブプロセスの作成、サブプロセスの管理、サブプロセスの処理。 簡単そうに聞こえますが、多くの知識が必要です。たとえば、各プロセスにはプロセス番号 (pid) があること、またコマンド ラインが php ファイルを実行する方法を知る必要があります。 (推奨学習: PHP ビデオ チュートリアル )

php マルチプロセスには、pcntl および posix 拡張機能のサポートが必要です。これは、php -m で表示できます。

子プロセスを作成する最初のステップでは、pcntl_fork() 関数が使用されます。関数の戻り値は通常 0 で、失敗した場合は -1 が返されます。まず、子プロセスを作成する直感的な例を示します。

    $ppid = posix_getpid();
    $pid = pcntl_fork();
    if ($pid == -1) {
        throw new Exception('fork子进程失败!');
    } elseif ($pid > 0) {
        cli_set_process_title("我是父进程,我的进程id是{$ppid}.");
     sleep(30); // 保持30秒,确保能被ps查到
    } else {
        $cpid = posix_getpid();
        cli_set_process_title("我是{$ppid}的子进程,我的进程id是{$cpid}.");
        sleep(30);
    }

子プロセスを管理する 2 番目のステップでは、シグナルを使用します。簡単に言うと、親プロセスは 2 つの関数 pcntl_signal() と pcntl_signal_dispatch を使用します。これらの関数は、シグナル プロセッサのインストールと子プロセスへの作業の分配を担当します。このステップにはコールバック関数の概念が含まれるため、最初に簡単に紹介します。将来的には、より包括的な内容を追加する予定です。

子プロセスを処理する 3 番目のステップにも 2 つの関数が必要です。 1 つは終了シグナルを送信する posix_kill() 関数であり、もう 1 つは子プロセスの状態を待つ pcntl_waitpid() 関数であり、子プロセスとともにタスクを完了するという目的を達成できます。

バックエンド開発はこんな感じで、複雑そうに思っていることも実はとてもわかりやすい手順で、基本的には多くの知識が必要ですが、機能はそれほど多くありません。したがって、始めたら、とにかく噛み砕いて学び、いつかはっきりと理解できるようになると信じてください。

以上がPHPはシングルプロセスですか、それともマルチプロセスですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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