効率的な PHP アプリケーションを作成するには、特に同時に処理する必要がある複数のタスクや操作を扱う場合、同時実行性と並列処理を理解することが重要です。ここでは、PHP での並行性と並列性を理解して実装するためのステップバイステップのガイドを、実践的な例と説明とともに示します。
同時実行性: 実行をインターリーブすることによって複数のタスクを一度に処理するシステムの能力を指します。これは必ずしもタスクが同時に実行されることを意味するものではなく、同時に進行しているように見えるようにタスクが管理されるというだけです。
並列処理: 複数のプロセッサーまたはコアを活用して、複数のタスクを同時に実行します。これは、タスクが文字通り並行して実行される同時実行性のサブセットです。
PHP は伝統的にシングルスレッドであり、一度に 1 つのタスクを処理します。ただし、非同期処理や外部ツールの使用などの手法を通じて同時実行性を実現することもできます。
PHP の pcntl (プロセス制御) 拡張機能を使用すると、プロセス制御が可能になり、プロセスをフォークすることで同時実行性を実現できます。
前提条件:
例:
<?php // Check if pcntl is available if (!function_exists('pcntl_fork')) { die('The pcntl extension is not available.'); } $pid = pcntl_fork(); if ($pid == -1) { // Fork failed die('Could not fork'); } elseif ($pid) { // Parent process echo "Parent Process\n"; pcntl_wait($status); // Wait for child process to finish } else { // Child process echo "Child Process\n"; sleep(2); // Simulate a task echo "Child Process Finished\n"; } ?>
説明:
ReactPHP は、PHP のイベント駆動型プログラミング用のライブラリであり、非同期操作が可能です。
インストール:
composer require react/event-loop
例:
<?php require 'vendor/autoload.php'; use React\EventLoop\Factory; use React\Promise\PromiseInterface; $loop = Factory::create(); // Function to simulate an asynchronous task function asyncTask($name) { return new PromiseInterface(function ($resolve, $reject) use ($name) { echo "Starting $name...\n"; sleep(2); // Simulate a delay echo "$name completed.\n"; $resolve(); }); } $promise1 = asyncTask('Task 1'); $promise2 = asyncTask('Task 2'); // Wait for all promises to complete $loop->run(); ?>
説明:
並列処理には、複数のタスクを同時に実行することが含まれます。 PHP では、これは並列処理用に設計されたツールとライブラリを使用して実現できます。
並列拡張により、マルチスレッドを有効にすることで PHP での並列処理が可能になります。
インストール:
例:
<?php // Check if parallel is available if (!extension_loaded('parallel')) { die('The parallel extension is not available.'); } use parallel\{Runtime, Future}; // Function to run in parallel function task($name) { echo "Task $name started\n"; sleep(2); // Simulate a task echo "Task $name completed\n"; } // Create runtime environments $runtime1 = new Runtime(); $runtime2 = new Runtime(); // Start tasks in parallel $future1 = $runtime1->run(function() { task('1'); }); $future2 = $runtime2->run(function() { task('2'); }); // Wait for tasks to complete $future1->value(); $future2->value(); ?>
説明:
pthreads 拡張機能を使用すると、PHP スクリプトでスレッドの作成、読み取り、書き込みを行うことができます。
インストール:
例:
<?php // Check if pthreads is available if (!extension_loaded('pthreads')) { die('The pthreads extension is not available.'); } class Worker extends Thread { private $name; public function __construct($name) { $this->name = $name; } public function run() { echo "Thread {$this->name} started\n"; sleep(2); // Simulate a task echo "Thread {$this->name} completed\n"; } } $worker1 = new Worker('1'); $worker2 = new Worker('2'); // Start threads $worker1->start(); $worker2->start(); // Join threads to main script $worker1->join(); $worker2->join(); ?>
説明:
PHP の同時実行性と並列性を理解して実装すると、アプリケーションのパフォーマンスと応答性を大幅に向上させることができます。プロセスフォーク、非同期処理、マルチスレッドなどの手法を使用すると、複数のタスクをより効率的に処理できます。最適なパフォーマンスを達成するには、ニーズと環境に最も適したアプローチを選択してください。
これらの例は、特定のユースケースと PHP 環境に基づいて自由に調整してください。
以上がPHP での同時実行性と並列性の探求: 実践的なチュートリアルとヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。