並發和並行是現代程式設計中的基本概念,允許應用程式透過交錯執行(並發)或同時執行(並行)同時執行多個任務。 PHP 主要以其同步執行模型而聞名,現已發展為透過各種技術支援這些範例。
PHP 傳統上遵循同步執行模型,尤其是在典型的 Web 伺服器設定中與 Apache 一起使用時。在此模型中,每個 HTTP 請求都由單一 PHP 進程處理。處理請求涉及的步驟包括:
此模型確保簡單性和易於理解,但對於需要並行執行或同時處理多個任務的任務來說可能會變得低效。
隨著 Web 應用程式變得越來越複雜,PHP 中並發和平行執行的需求也在增長。讓我們來探索 PHP 提供的實作這些範例的技術。
同步程式碼是最簡單的執行形式,其中任務一個接一個地執行。
echo "Synchronous Code Example:\n"; function synchronousFunction() { for ($i = 0; $i在此範例中,循環的每次迭代按順序執行,迭代之間有一秒的延遲。這種方法很簡單,但對於可以從並行執行中受益的 I/O 密集型或 CPU 密集型任務來說效率較低。
2. 分叉進程
分叉創建一個與原始進程(父進程)同時運行的新進程(子進程)。這對於並行任務很有用。
echo "\nForking Process Example:\n"; function forkProcess() { $pid = pcntl_fork(); if ($pid == -1) { die('could not fork'); } else if ($pid) { echo "Parent Process: PID $pid\n"; pcntl_wait($status); // Protect against Zombie children } else { echo "Child Process: Hello from the child process!\n"; exit(0); } } forkProcess();在此程式碼中,pcntl_fork() 建立一個子程序。父進程和子進程同時執行,允許並行任務執行。父行程等待子程序完成以避免建立殭屍行程。
3. 執行緒
PHP 的執行緒功能可透過 pthreads 等擴充來使用。執行緒比進程輕,並且共享相同的記憶體空間,因此適合需要共享資料的任務。
if (!class_exists('Thread')) { die("Threads are not supported in this PHP build\n"); } echo "\nThreading Example:\n"; class MyThread extends Thread { public function run() { for ($i = 0; $i start(); $thread->join();此範例定義了一個擴展 Thread 的 MyThread 類別。 run方法在一個新執行緒中執行,與主執行緒並發運行。此方法對於 I/O 密集型操作非常有用,其中執行緒可以處理等待資源。
4. 發電機
生成器提供了一種實作簡單協同例程的方法,允許函數迭代地產生結果,而不會阻塞整個程式。
echo "\nGenerators Example:\n"; function simpleGenerator() { yield 'First'; yield 'Second'; yield 'Third'; } $gen = simpleGenerator(); foreach ($gen as $value) { echo "Generator Yielded: $value\n"; }產生器使用yield關鍵字一次產生一個值,允許暫停和恢復函數,從而促進一種協作多任務處理的形式。
PHP 從同步根源到支援各種形式的並行性已經取得了很大的進展。雖然同步程式碼對許多用例來說仍然簡單有效,但分叉進程、執行緒和使用生成器等技術為有效處理複雜、可並行的任務開闢了新的可能性。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3