Rumah > pembangunan bahagian belakang > PHP7 > Bagaimana untuk menggunakan PHP7.0 untuk pengaturcaraan serentak?

Bagaimana untuk menggunakan PHP7.0 untuk pengaturcaraan serentak?

WBOY
Lepaskan: 2023-05-28 08:51:24
asal
1497 orang telah melayarinya

PHP7.0 ialah salah satu bahasa pengaturcaraan sebelah pelayan yang paling biasa digunakan. Ia mempunyai antara muka yang mesra, mudah dipelajari, fungsi berkuasa dan perpustakaan sambungan yang kaya. Dari segi pengaturcaraan serentak, PHP7.0 juga mempunyai banyak alat dan teknologi yang sangat baik. Artikel ini akan memperkenalkan cara melaksanakan pengaturcaraan serentak dalam PHP7.0.

1. Apakah itu pengaturcaraan serentak

Pengaturcaraan serentak merujuk kepada kaedah pengaturcaraan yang menggunakan berbilang urutan, proses atau coroutine untuk melaksanakan berbilang tugas pada masa yang sama. Dalam pengaturcaraan, penggunaan teknik konkurensi yang berkesan boleh meningkatkan prestasi program dan pemprosesan.

2. Alat pengaturcaraan serentak PHP7.0

Dalam PHP7.0, terdapat banyak alatan untuk dipilih untuk menulis program serentak. Berikut ialah beberapa alatan yang biasa digunakan:

1. Sambungan PCNTL

Sambungan PCNTL yang disediakan oleh PHP menyediakan satu set fungsi untuk mengurus proses dan pemprosesan isyarat. Menggunakan sambungan ini, anda boleh mengurus berbilang tugasan dengan mudah dalam proses yang sama pada masa yang sama.

2. sambungan pthread

sambungan pthread ialah sambungan PHP berguna yang melaksanakan antara muka utas POSIX dalam PHP. Sambungan ini menyediakan pelbagai kemudahan untuk mencipta, memusnahkan, menyegerakkan dan berkomunikasi benang.

3. Sambungan Swoole

Swoole ialah sambungan PHP yang menyediakan fungsi pengaturcaraan tak segerak, tidak menyekat dan coroutine. Sambungan ini telah menjadi salah satu projek sumber terbuka yang popular dalam PHP, menyediakan rangka kerja pengaturcaraan serentak yang lengkap termasuk protokol rangkaian, kumpulan benang, tugas tak segerak dan banyak lagi.

4. Protokol AMQP

Protokol AMQP, nama penuh ialah Protokol Gilir Mesej Lanjutan, ialah protokol baris gilir mesej. Menggunakan protokol AMQP, operasi tak segerak dan teragih boleh dilaksanakan, dan pengaturcaraan serentak boleh dilaksanakan dengan mudah.

3. Teknologi dan contoh penggunaan PHP7.0 untuk pengaturcaraan serentak

Berikut ialah beberapa teknologi dan contoh penggunaan PHP7.0 untuk pengaturcaraan serentak:

1 Sambungan PCNTL

Cara klasik untuk menyegerakkan berbilang tugas ialah menggunakan mekanisme garpu. Menggunakan teknologi ini, anda boleh memulakan berbilang sub-proses dalam satu proses untuk menjalankan berbilang tugas secara serentak. Berikut ialah kod sampel:

$NUM_CHILDREN = 5;  

$pid_array = array();  

for ($i = 0; $i < $NUM_CHILDREN; ++$i) {  
    $pid = pcntl_fork();  

    if ($pid == -1) {  
        die('could not fork');  
    } else if ($pid) {  
        $pid_array[] = $pid;  
    } else {  
        sleep(5);  
        exit(0);  
    }  
}  

while(count($pid_array) > 0) {  
    foreach($pid_array as $key => $pid) {  
        $res = pcntl_waitpid($pid, $status, WNOHANG);  

        if($res == -1 || $res > 0) {  
            unset($pid_array[$key]);  
        }  
    }  
}  
Salin selepas log masuk

Contoh di atas mula-mula mentakrifkan pembolehubah $num_children, menunjukkan bilangan tugasan yang perlu dijalankan serentak. Kemudian, ia memulakan proses anak $num_children dan menunggu mereka selesai. Ambil perhatian bahawa dalam contoh ini, proses utama akan tamat selepas proses anak selesai.

2. Gunakan sambungan pthread

Menggunakan sambungan pthread, anda boleh membuat dan mengurus berbilang urutan serentak untuk melaksanakan berbilang tugas pada masa yang sama. Berikut ialah contoh mudah:

class MyThread extends Thread {   
    public function run() {  
        echo "Task started";  
        sleep($this->rand(1, 5));  
        echo "Task completed";  
    }  
}  

$thread1 = new MyThread();  
$thread1->start();  

$thread2 = new MyThread();  
$thread2->start();  

$thread1->join();  
$thread2->join();  
Salin selepas log masuk

Dalam kod di atas, kelas urutan tersuai bernama MyThread ditakrifkan. Kelas ini mengatasi kaedah run dalam kelas Thread dan mentakrifkan tugas serentak di dalamnya. Dalam bahagian kod utama, buat contoh utas dan gunakan kaedah mula() untuk memulakan utas. Kemudian, gunakan kaedah join() untuk menunggu urutan selesai.

3. Gunakan sambungan Swoole

Sambungan Swoole menyediakan rangka kerja pengaturcaraan serentak yang mudah, yang boleh mengendalikan pembangunan tak segerak, tidak menyekat dan coroutine. Berikut ialah contoh pengaturcaraan serentak menggunakan Swoole:

$server = new swoole_http_server("127.0.0.1", 9501);  

$server->on('request', function ($request, $response) {  
    $response->header("Content-Type", "text/plain");  
    $response->end("Hello World
");  
});  

$server->start();
Salin selepas log masuk

Kod di atas mencipta pelayan HTTP Swoole yang mendengar pada port 9501. Apabila diminta, pelayan hanya akan mengembalikan "Hello World". Ambil perhatian bahawa kod yang ditulis dalam contoh ini adalah tak segerak dan tidak menyekat. Ini membolehkan pelayan mengendalikan banyak permintaan serentak dengan prestasi unit yang tinggi.

4. Gunakan protokol AMQP

Protokol AMQP ialah standard baris gilir mesej. Menggunakan protokol AMQP, operasi penghantaran dan penerimaan mesej, serta pengaturcaraan tak segerak boleh dilaksanakan dengan mudah. Berikut ialah contoh pengaturcaraan serentak AMQP:

require __DIR__ . '/vendor/autoload.php';  

use PhpAmqpLibConnectionAMQPConnection;  

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');  
$channel = $connection->channel();  

$channel->queue_declare('task_queue', false, true, false, false);  

echo ' [*] Waiting for messages. To exit press CTRL+C', "
";  

$callback = function($msg) {  
  echo " [x] Received ", $msg->body, "
";  
  sleep(substr_count($msg->body, '.'));  
  echo " [x] Done", "
";  
};  

$channel->basic_qos(null, 1, null);  

$channel->basic_consume('task_queue', '', false, true, false, false, $callback);  

while(count($channel->callbacks)) {  
    $channel->wait();  
}  

$channel->close();  
$connection->close();  
Salin selepas log masuk

Dalam kod di atas, baris gilir tugas dibuat pada baris gilir rabbitmq menggunakan protokol AMQP untuk mendapatkan tugas tak segerak dan kemudian laporkan selepas menyelesaikan tugasan. Dalam contoh ini, kami menggunakan perpustakaan PhpAmqpLib, iaitu perpustakaan sambungan PHP yang merangkum protokol AMQP.

4. Ringkasan

Menggunakan pengaturcaraan serentak PHP7.0, anda boleh dengan lebih mudah melaksanakan aplikasi berprestasi tinggi dan berkemampuan tinggi. Dalam artikel ini, kami memperkenalkan beberapa alat pengaturcaraan serentak PHP yang biasa digunakan, termasuk sambungan PCNTL, sambungan pthread, sambungan Swoole dan protokol AMQP. Selain itu, kami juga menunjukkan beberapa contoh penggunaan alatan ini. Jika anda ingin memaksimumkan prestasi aplikasi anda, pertimbangkan untuk mencuba teknik ini.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan PHP7.0 untuk pengaturcaraan serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan