Terdapat perbincangan berterusan tentang kemungkinan melaksanakan multi-threading dalam aplikasi PHP. Walaupun nampaknya tidak realistik, terdapat cara untuk mencapainya menggunakan sambungan pthreads.
Pthreads Extension ialah alat berkuasa yang membolehkan pembangun mencipta aplikasi PHP berbilang benang. Ia menyediakan API berorientasikan objek untuk mencipta, menyegerak dan mengurus benang. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa sambungan ini tidak boleh digunakan dalam persekitaran pelayan web dan terhad kepada aplikasi berasaskan CLI sahaja.
Adalah penting untuk mengetahui daripada amaran berikut yang dikaitkan dengan sambungan pthreads:
Berikut ialah contoh mudah menggunakan sambungan pthreads untuk mencipta berbilang urutan:
#!/usr/bin/php <?php class AsyncOperation extends Thread { public function __construct($arg) { $this->arg = $arg; } public function run() { if ($this->arg) { $sleep = mt_rand(1, 10); printf('%s: %s -start -sleeps %d' . "\n", date("g:i:sa"), $this->arg, $sleep); sleep($sleep); printf('%s: %s -finish' . "\n", date("g:i:sa"), $this->arg); } } } // Create a stack of threads $stack = array(); // Initiate multiple threads foreach ( range("A", "D") as $i ) { $stack[] = new AsyncOperation($i); } // Start the threads foreach ( $stack as $t ) { $t->start(); }
Apabila melaksanakan skrip ini, anda akan perasan bahawa berbilang benang dicipta dan dilaksanakan serentak, menunjukkan keupayaan berbilang benang PHP dengan pthreads.
Berikut ialah contoh penggunaan sambungan pthreads untuk senario dunia sebenar:
error_reporting(E_ALL); class AsyncWebRequest extends Thread { public $url; public $data; public function __construct($url) { $this->url = $url; } public function run() { if (($url = $this->url)) { $this->data = file_get_contents($url); } else printf("Thread #%lu was not provided a URL\n", $this->getThreadId()); } } $t = microtime(true); $g = new AsyncWebRequest(sprintf("http://www.google.com/?q=%s", rand() * 10)); // starting synchronization if ($g->start()) { printf("Request took %f seconds to start ", microtime(true) - $t); while ( $g->isRunning() ) { echo "."; usleep(100); } if ($g->join()) { printf(" and %f seconds to finish receiving %d bytes\n", microtime(true) - $t, strlen($g->data)); } else printf(" and %f seconds to finish, request failed\n", microtime(true) - $t); }
Skrip ini menunjukkan cara membuat permintaan web tak segerak menggunakan sambungan pthreads. Ia mempamerkan cara berbilang benang boleh meningkatkan prestasi dalam aplikasi yang perlu mengendalikan berbilang tugas secara serentak.
Pelanjutan pthread menyediakan cara untuk melaksanakan berbilang benang dalam aplikasi PHP, walaupun ia mempunyai beberapa batasan. Walau bagaimanapun, pembangun harus mengetahui amaran dan mempertimbangkan kesesuaian pthread untuk kes penggunaan khusus mereka.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Multi-threading dalam Aplikasi PHP Menggunakan Sambungan pthreads?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!