PHP の複数のプロセス

May 23, 2023 am 08:39 AM
並列コンピューティング phpマルチプロセスプログラミング プロセス間通信

インターネットの発展に伴い、大量のユーザー アクセス リクエストを処理する必要がある Web サイトがますます増えています。高い同時実行性が発生すると、単一プロセス サーバーはすぐにボトルネックに達し、ユーザーが通常どおり Web サイトにアクセスできなくなります。したがって、マルチプロセスは、同時実行性が高い問題を解決するための効果的なソリューションの 1 つとなっています。この記事では、プログラムの品質を確保しながら同時リクエストを処理するプログラムの能力を向上させる、PHP のマルチプロセス テクノロジを紹介します。

1. マルチプロセスの概要

コンピューター サイエンスでは、プロセスとは実行中のプログラム インスタンスを指します。各プロセスには独自のメモリ空間とシステム リソースがあります。マルチプロセッシングとは、1つのプログラム内に複数の処理を作成することを指します。各プロセスは独立して実行され、独自のプロセス番号とプロセス制御ブロックを持ち、相互に干渉しません。マルチプロセス技術は、サーバー ソフトウェア、オペレーティング システム、その他の分野で広く使用されています。

2. PHP でのマルチプロセス

  1. マルチプロセスを実装する方法

PHP でマルチプロセスを実装するには、pcntl 拡張機能を使用できます。またはposix拡張子。どちらの拡張機能も、プロセスの作成、プロセス間通信、シグナル処理などの機能を提供します。

pcntl 拡張子は、プロセスの作成、操作、管理のための多くの関数を提供する PHP のプロセス制御関数ライブラリです。 pcntl関数ライブラリを利用して複数のプロセスを実装すると、プロセスの親子関係、シグナル伝達、リソース共有などを簡単に制御できます。

posix 拡張機能は、pcntl 拡張機能を補足するプロセス制御、信号処理、その他の機能も提供します。また、ファイル操作、システム情報クエリなど、より多くのシステム機能も提供します。

  1. 子プロセスの作成

pcntl_fork() 関数を使用して、PHP で子プロセスを作成します。 fork()関数の戻り値が異なることで親プロセスと子プロセスを区別することができ、親プロセスと子プロセスの区別が実現される。

$pid = pcntl_fork();   // 创建子进程
if ($pid == -1) {
    die('fork failed');
} elseif ($pid == 0) { // 子进程
    // 子进程代码
} else {                // 父进程
    // 父进程代码
}
ログイン後にコピー

fork() 関数が呼び出された後、オペレーティング システムは新しい子プロセスを作成します。この時点では、メイン プロセスは引き続き実行でき、子プロセスは fork() 関数の後に実行を開始します。 。子プロセスの pid は 0 で、親プロセスの pid は子プロセスの pid 値です。サブプロセスを作成した後、サブプロセス内で時間のかかる操作を実行したり、いくつかのタスクを並行して実行したりできるため、処理システム全体の同時実行パフォーマンスが向上します。

  1. 子プロセスの終了ステータス

子プロセスの実行が完了したら、その終了ステータスを取得する必要があります。 pcntl_waitpid() 関数の最初のパラメータは子プロセスの終了を待機しているプロセス番号、2 番目のパラメータは子プロセスの終了ステータスが保存される場所です。戻り値が正の場合は、子プロセスが終了したことを意味し、それ以外の場合は、待機中にシグナルによって中断されたことを意味します。

$pid = pcntl_fork();
if ($pid == -1) {
    die('fork failed');
} elseif ($pid == 0) {
    // 子进程
    exit(0); // 子进程退出状态为0
} else {
    // 父进程
    pcntl_waitpid($pid, $status); // 等待子进程退出
    echo $status;   // 输出子进程退出状态
}
ログイン後にコピー

3. 実践的なケース

以下では、簡単な実践的なケースを使用して、PHP でマルチプロセス テクノロジを使用する方法を説明します。

複数の URL の内容を取得するスクリプトを実装し、複数のサブプロセスを作成して URL の内容を同時に取得し、取得成功後にその内容をデータベースに保存します。

<?php
// 需要获取的URL列表
$urlList = [
    'https://www.baidu.com/',
    'https://www.qq.com/',
    'https://www.sina.com.cn/',
    'https://www.163.com/',
    'https://www.taobao.com/'
];

// 创建多个子进程并行获取URL内容
foreach ($urlList as $url) {
    $pid = pcntl_fork();
    if ($pid == -1) {
        die('fork failed');
    } elseif ($pid == 0) {
        // 子进程
        $content = file_get_contents($url); // 获取URL内容
        // 保存内容到数据库
        $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
        $stmt = $pdo->prepare("INSERT INTO url_content(url, content) VALUES(?, ?)");
        $stmt->execute([$url, $content]);
        exit(0);
    }
}

// 等待所有子进程执行完毕
while (pcntl_waitpid(0, $status) != -1) {
    // do nothing
}
echo 'All child processes have terminated' . PHP_EOL;
ログイン後にコピー

上記のコードでは、foreach を介して $urllist を走査し、複数のサブプロセスを作成して URL コンテンツを並行して取得します。 file_get_contents() 関数を通じて URL コンテンツを取得した後、そのコンテンツをデータベースに保存します。親プロセスでは、while 関数と pcntl_waitpid() 関数を通じて子プロセスの実行が完了するのを待ちます。

4. 注意事項

マルチプロセステクノロジを使用する場合は、次の点に注意する必要があります:

  1. 子プロセスは親プロセスより前に終了する必要があります。終了しない場合は、ゾンビ プロセスが作成されます。
  2. 子プロセスは、親プロセスが作成されたときにのみコピーを作成します。子プロセスによって変更されたコンテンツは親プロセスに影響を与えず、親プロセスによって変更されたコンテンツは子プロセスに影響を与えません。
  3. 子プロセスが作成されると、親プロセスのすべての変数とファイル記述子がコピーされますが、親プロセスによって開かれたストリームはコピーされません。
  4. マルチプロセステクノロジを使用する場合、システムリソースの過剰な消費を避けるために、システムリソースの使用状況を考慮する必要があります。

5. 概要

PHP でマルチプロセス テクノロジを適用すると、同時リクエストを処理するプログラムの能力が効果的に向上します。マルチプロセス技術により、複数のタスクを並列処理することができ、システムの応答速度と同時実行性を向上させることができます。プログラムの品質を確保することを前提として、マルチプロセス技術は効率的でシンプルなソリューションを提供します。

以上がPHP の複数のプロセスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL と Oracle: 並列クエリと並列コンピューティングのサポートの比較 MySQL と Oracle: 並列クエリと並列コンピューティングのサポートの比較 Jul 14, 2023 pm 08:48 PM

MySQL と Oracle: 並列クエリと並列コンピューティングのサポートの比較 概要: この記事では、並列クエリと並列コンピューティングの観点から、最も一般的に使用されている 2 つのリレーショナル データベース システム、MySQL と Oracle のサポート レベルに焦点を当てます。それらの特性、アーキテクチャ、およびコード例を比較することで、読者が並列クエリと並列コンピューティングの概念、およびこの分野における 2 つのデータベース システムの異なるパフォーマンスをより深く理解できるようにすることを目的としています。キーワード: MySQL、Oracle、並列クエリ、並列コンピューティング はじめに 情報化時代に伴い

C++ビッグデータ開発におけるデータ分析速度を向上させるにはどうすればよいですか? C++ビッグデータ開発におけるデータ分析速度を向上させるにはどうすればよいですか? Aug 27, 2023 am 10:30 AM

C++ ビッグ データ開発におけるデータ分析の速度を向上させるにはどうすればよいですか? はじめに: ビッグ データ時代の到来により、データ分析は企業の意思決定と事業開発に不可欠な部分になりました。ビッグ データ処理では、C++ は効率的かつ強力なコンピューティング言語として、データ分析の開発プロセスで広く使用されています。しかし、大規模なデータを扱う場合、C++ビッグデータ開発においてデータ解析の速度をいかに向上させるかが重要な課題となっています。この記事では、より効率的なデータ構造とアルゴリズム、マルチスレッド同時処理と GP の使用から始めます。

PHP の複数のプロセス PHP の複数のプロセス May 23, 2023 am 08:39 AM

インターネットの発展に伴い、大量のユーザー アクセス リクエストを処理する必要がある Web サイトがますます増えています。高い同時実行性が発生すると、単一プロセス サーバーはすぐにボトルネックに達し、ユーザーが通常どおり Web サイトにアクセスできなくなります。したがって、マルチプロセスは、同時実行性が高い問題を解決するための効果的なソリューションの 1 つとなっています。この記事では、プログラムの品質を確保しながら同時リクエストを処理するプログラムの能力を向上させる、PHP のマルチプロセス テクノロジについて紹介します。 1. マルチプロセスの概要 コンピュータ サイエンスでは、プロセスとは実行中のプログラム インスタンスを指します。各プロセスには独自のメモリ空間とシステム リソースがあります。

Pythonと量子コンピューティングのダンス: 量子の未来の夢を織りなすコードの美しさ Pythonと量子コンピューティングのダンス: 量子の未来の夢を織りなすコードの美しさ Feb 19, 2024 pm 05:27 PM

量子コンピューティングの分野では、Python が人気のプログラミング言語になっています。学習が簡単で、豊富なライブラリとツールのセットを備えているため、量子コンピューティングの開発と研究に最適です。量子コンピューティングにおける Python の利点 Python には、量子コンピューティングにおいて次のような多くの利点があります。 学習が簡単: Python は、初心者でもすぐにマスターできるシンプルなプログラミング言語です。これは、量子コンピューティングの学習に最適です。豊富なライブラリとツール: Python には量子コンピューティング用のライブラリとツールが多数あり、開発者が新しいアイデアを迅速に開発してテストするのに役立ちます。柔軟性: Python は非常に柔軟な言語であり、さまざまなニーズに合わせて簡単に拡張できます。これにより、量子コンピューティングに最適になります

C++ 関数は並列コンピューティングをどのようにサポートしますか? C++ 関数は並列コンピューティングをどのようにサポートしますか? Apr 28, 2024 am 08:36 AM

C++ 関数の並列コンピューティングは、スレッド、ミューテックス、並列アルゴリズムを使用して実装されます。スレッドとミューテックスを使用してタスクを同期し、データの競合を回避します。並列アルゴリズムを使用して、行列の乗算などの一般的なタスクを効率的に実行します。これらのメカニズムを組み合わせることで、現代のコンピューティングのニーズを満たすスケーラブルで高性能な C++ コードを作成できます。

C# 開発におけるビッグデータ処理と並列コンピューティングの問題解決方法に対処する方法 C# 開発におけるビッグデータ処理と並列コンピューティングの問題解決方法に対処する方法 Oct 09, 2023 pm 07:17 PM

C# 開発でビッグ データ処理と並列コンピューティングの問題解決に対処するには、具体的なコード サンプルが必要です。 現在の情報化時代では、データ量が急激に増加しています。開発者にとって、ビッグデータと並列コンピューティングを扱うことは重要なタスクになっています。 C# 開発では、いくつかのテクノロジとツールを使用してこれらの問題を解決できます。この記事では、いくつかの一般的な回避策と具体的なコード例を紹介します。 1. 並列ライブラリを使用する C# には、並列プログラミングの使用を簡略化するために設計された並列ライブラリ (Parallel) が用意されています。

Python スクリプトを使用して Linux システムに並列コンピューティングを実装する方法 Python スクリプトを使用して Linux システムに並列コンピューティングを実装する方法 Oct 05, 2023 am 09:09 AM

Python スクリプトを使用して Linux システムで並列コンピューティングを実装する方法には、特定のコード サンプルが必要です。最新のコンピューターの分野では、大規模なデータ処理や複雑なコンピューティング タスクに並列コンピューティングを使用すると、コンピューティング効率が大幅に向上します。 Linux は強力なオペレーティング システムとして、並列コンピューティングを簡単に実装できる豊富なツールと機能を提供します。シンプルで使いやすく強力なプログラミング言語である Python には、並列コンピューティング タスクの作成に使用できるライブラリとモジュールも多数あります。この記事ではPythの使い方を紹介します。

Go言語を使用して並列計算機能を実装する方法 Go言語を使用して並列計算機能を実装する方法 Aug 04, 2023 am 11:33 AM

Go 言語を使用して並列コンピューティング機能を実装する方法 Go 言語は効率的で同時実行のプログラミング言語であり、並列コンピューティング タスクに特に適しています。この記事では、Go 言語を使用して並列コンピューティング関数を実装する方法を紹介し、関連するコード例を示します。並列コンピューティングとは、大きなタスクを複数の小さなタスクに分割し、それらを複数のプロセッサーで同時に実行することにより、コンピューティング効率を向上させることです。 Go 言語は豊富な同時プログラミング機能を備えているため、並列コンピューティングの実装が比較的簡単です。以下は、Go 言語を使用して実装する方法を示す例です。

See all articles