Swoole ialah rangka kerja komunikasi rangkaian berprestasi tinggi untuk PHP, yang boleh membantu kami mencapai pengaturcaraan serentak rangkaian berprestasi tinggi. Salah satu ciri yang paling penting ialah sokongannya untuk pelbagai proses, yang membolehkan kami melaksanakan pengaturcaraan rangkaian konkurensi tinggi melalui pelbagai proses.
Artikel ini akan memperkenalkan cara menggunakan Swoole untuk melaksanakan pengaturcaraan serentak berbilang proses, termasuk penciptaan berbilang proses, komunikasi, penyegerakan, dll., dan akan memberikan contoh kod khusus.
$process = new swoole_process(function(swoole_process $process) { // 子进程的逻辑代码 $process->write("Hello world! "); // 向主进程发送消息 $process->exit(); }); $process->start(); // 父进程接收子进程消息 $msg = $process->read(); echo $msg;
Dalam contoh ini, subproses dicipta menggunakan pembina kelas swoole_process dan kod logik subproses itu dilaksanakan melalui fungsi panggil balik. Kaedah start() memulakan proses anak, dan kemudian proses induk menerima mesej yang dihantar oleh proses anak melalui kaedah read().
$process = new swoole_process(function(swoole_process $process) { $process->write("Hello world! "); $data = $process->read(); echo "Child process received: " . $data; $process->exit(); }, true); // 启用管道通信模式 $process->start(); $msg = $process->read(); echo $msg; $process->write("I am the parent process. "); $process->wait(); // 等待子进程退出
Dalam contoh ini, kami memanggil pembina kelas swoole_process dan lulus dalam parameter jenis boolean yang menunjukkan bahawa mod komunikasi paip didayakan. Kemudian panggil kaedah write() dalam proses induk untuk menghantar mesej kepada proses anak dan terima mesej daripada proses anak melalui kaedah read(). Dalam proses anak, kaedah write() juga digunakan untuk menghantar mesej kepada proses induk, dan kaedah read() digunakan untuk menerima mesej daripada proses induk.
$lock = new swoole_lock(SWOOLE_MUTEX); // 创建一个互斥锁 $process1 = new swoole_process(function(swoole_process $process) use ($lock) { $lock->lock(); // 加锁 echo "Process 1 acquired the lock. "; sleep(1); $lock->unlock(); // 解锁 }); $process2 = new swoole_process(function(swoole_process $process) use ($lock) { $lock->lock(); // 加锁 echo "Process 2 acquired the lock. "; sleep(1); $lock->unlock(); // 解锁 }); $process1->start(); $process2->start(); $process1->wait(); $process2->wait();
Dalam contoh ini, kami menggunakan kelas swoole_lock untuk mencipta kunci mutex dan kunci serta buka kuncinya dalam dua proses anak masing-masing. Dalam proses induk, kami memanggil kaedah wait() untuk menunggu dua proses anak menyelesaikan pelaksanaan.
$workers = []; $worker_num = 3; for ($i = 0; $i < $worker_num; $i++) { $process = new swoole_process(function (swoole_process $worker) { $num = rand(1, 100); echo "Worker {$worker->pid} is calculating the square of $num... "; sleep(1); $worker->write($num * $num); $worker->exit(); }, true); $pid = $process->start(); $workers[$pid] = $process; } // 父进程接收子进程返回的计算结果 foreach ($workers as $pid => $process) { $result = $process->read(); echo "Worker $pid calculated the result: $result "; } echo "All workers have completed their tasks. ";
Dalam contoh ini, kami mencipta 3 sub-proses, setiap sub-proses menjana nombor secara rawak, mengira kuasa dua nombor ini dan mengembalikannya. Proses induk menerima hasil yang dikembalikan oleh semua proses anak melalui gelung dan mencetaknya ke konsol. Akhirnya, proses induk mencetak mesej bahawa semua tugas telah selesai.
Ringkasan
Swoole ialah rangka kerja komunikasi rangkaian berprestasi tinggi yang berkuasa yang menyediakan sokongan yang baik untuk pengaturcaraan berbilang proses. Apabila menggunakan Swooole untuk pengaturcaraan berbilang proses, anda perlu mempertimbangkan pelbagai isu seperti penciptaan proses, komunikasi dan penyegerakan. Artikel ini menyediakan contoh kod khusus, dengan harapan dapat membantu pembaca memahami dengan lebih baik dan menguasai kemahiran pengaturcaraan berbilang proses Swoole.
Atas ialah kandungan terperinci Cara menggunakan Swoole untuk melaksanakan pengaturcaraan serentak berbilang proses. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!