Rumah > rangka kerja php > Swoole > teks badan

Amalan pengaturcaraan coroutine dan tak segerak Swoole

PHPz
Lepaskan: 2023-06-13 22:36:12
asal
900 orang telah melayarinya

Dengan pembangunan aplikasi Internet yang berterusan, konkurensi yang tinggi telah menjadi cabaran yang mesti dihadapi oleh setiap pembangun. Untuk menghadapi konkurensi yang tinggi, pelajar bahagian hadapan menggunakan teknologi seperti paparan bahagian hadapan dan I/O tak segerak, manakala pelajar bahagian belakang menggunakan teknologi coroutine dan pengaturcaraan tak segerak. Antaranya, Swoole ialah rangka kerja coroutine dalam bahasa PHP Ia menggunakan coroutine dan idea pengaturcaraan tak segerak untuk memudahkan pembangunan dan penyahpepijatan di bawah konkurensi tinggi dan menyediakan pengalaman pembangunan yang lebih baik.

1. Konsep coroutine dan pengaturcaraan tak segerak

Pemahaman coroutine boleh difahami secara ringkas sebagai "benang mikro", yang merupakan konsep yang serupa dengan utas, tetapi berbeza daripada mekanisme pensuisan bagi benang. Coroutine bukan utas kernel sistem pengendalian, tetapi ditukar dalam proses pengguna. Menggunakan coroutine boleh melakukan menunggu tanpa sekatan, sambil meningkatkan penggunaan CPU dan mengurangkan bilangan suis konteks.

Pengaturcaraan tak segerak ialah kaedah pengaturcaraan "didorong oleh peristiwa" Ciri utamanya ialah penggunaan I/O tidak menyekat, yang mengelakkan masa menunggu benang yang disebabkan oleh menunggu penyekatan I/O dan meningkatkan keselarasan. Dalam pengaturcaraan tak segerak, apabila acara selesai, atur cara akan memberitahu utas yang berkaitan untuk meneruskan pemprosesan, bukannya membiarkan utas menyekat dan menunggu. Pengaturcaraan tak segerak menggunakan panggilan balik untuk mengendalikan operasi tak segerak untuk mengendalikan selang seli antara coroutine dan meningkatkan keupayaan pemprosesan serentak program.

2. Amalan pengaturcaraan coroutine dan tak segerak Swoole

  1. Coroutine

Coroutine Swoole mensimulasikan dan melaksanakan proses dalam persekitaran bahasa PHP Dan mekanisme coroutine dalam utas . Dalam coroutine Swoole, anda boleh menggunakan penjadual coroutine untuk menyerahkan kawalan berjalan PHP kepada coroutine, mengelakkan masa menunggu thread yang disebabkan oleh menunggu menyekat I/O dan meningkatkan kecekapan operasi. Coroutine menyedari pertukaran antara coroutine dengan bantuan fungsi swoole_coroutine_create() dan swoole_coroutine_resume(). Pada masa yang sama, Swoole menyediakan fungsi dipacu peristiwa seperti swoole_event_add(), swoole_event_set(), dsb., yang memudahkan model pengaturcaraan coroutine dengan ketara.

Di bawah, kita akan memahami penggunaan Swoole coroutine langkah demi langkah melalui amalan kod.

1) Pasang sambungan Swoole

Mula-mula, kita perlu memasang sambungan Swoole untuk merealisasikan pembangunan Swoole coroutine. Sambungan Swoole boleh dipasang melalui arahan berikut:

$ pecl install swoole
Salin selepas log masuk
Salin selepas log masuk

2) Buat coroutine

Seterusnya, kita perlu mencipta coroutine dan menggunakan fungsi swoole_coroutine_resume() untuk melaksanakan coroutine. Kod khusus adalah seperti berikut:

<?php
function test_coroutine(){
    echo "Start coroutine
";
    swoole_coroutine::sleep(1);
    echo "End coroutine
";
}
swoole_coroutine::create("test_coroutine");
echo "Main func end
";
Salin selepas log masuk

Kita dapat melihat bahawa fungsi swoole_coroutine_create() digunakan dalam kod untuk mencipta coroutine dan fungsi test_coroutine() dihantar masuk. Pada masa ini, coroutine belum lagi dilaksanakan Selepas memanggil swoole_coroutine_create(), sistem menyerahkan coroutine kepada penjadual coroutine dan menunggu untuk dilaksanakan. Seterusnya, dengan memanggil fungsi swoole_coroutine_resume(), fungsi test_coroutine() dilaksanakan dan hasil yang berkaitan adalah output.

3) Bertukar antara coroutine

Dalam coroutine, kita juga boleh menggunakan fungsi swoole_coroutine_yield() untuk menukar coroutine secara manual. Kod pelaksanaan khusus adalah seperti berikut:

<?php
function test_coroutine(){
    for ($i=0; $i<5; $i++){
        echo "Coroutine $i
";
        swoole_coroutine::yield();
    }
}
$c = swoole_coroutine::create("test_coroutine");
for ($i=0; $i<5; $i++){
    swoole_coroutine::resume($c);
}
Salin selepas log masuk

Melalui kod di atas, kami mencipta coroutine dan gelung 5 kali dalam fungsi test_coroutine() untuk mengeluarkan nombor coroutine. Melalui fungsi swoole_coroutine_yield(), anda boleh menukar coroutine secara manual supaya berbilang coroutine boleh diproses secara adil.

  1. Pengaturcaraan Asynchronous

Pengaturcaraan tak segerak Swoole dilaksanakan terutamanya berdasarkan fungsi dipacu peristiwa seperti woole_event_add(), swoole_event_set() dan swoole(_event_wait(_event_event). Khususnya, fungsi woole_event_add() dan swoole_event_set() digunakan untuk menambah peristiwa I/O pada gelung acara, manakala fungsi swoole_event_wait() digunakan untuk memulakan gelung acara.

Di bawah, kita akan memahami amalan pengaturcaraan tak segerak Swoole langkah demi langkah melalui kod.

1) Pasang sambungan Swoole

Mula-mula, kita perlu memasang sambungan Swoole untuk membolehkan pembangunan pengaturcaraan tak segerak Swoole. Sambungan Swoole boleh dipasang melalui arahan berikut:

$ pecl install swoole
Salin selepas log masuk
Salin selepas log masuk

2) Komunikasi TCP tak segerak

Dalam Swoole, komunikasi TCP tak segerak antara sistem boleh disokong melalui swoole_client dan swoole_server. Dalam komunikasi TCP tak segerak, kita perlu menggunakan SwooleServer untuk memulakan perkhidmatan TCP dan menggunakan fungsi swoole_event_add() pada bahagian pelayan untuk menambah acara I/O pada perkhidmatan. Pengirim mesej menggunakan swoole_client untuk melaksanakan komunikasi tak segerak. Kod pelaksanaan khusus adalah seperti berikut:

<?php
//异步TCP服务端
$serv = new swoole_server("127.0.0.1", 9501);
$serv->set(array(
    'worker_num' => 4,
    'daemonize' => false,
));

$serv->on('Receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, 'Server: '.$data);
    $serv->close($fd);
});

$serv->start();
Salin selepas log masuk
<?php
//异步TCP客户端
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);

$client->on("connect", function($cli) {
    $cli->send("hello world
");
});

$client->on("receive", function($cli, $data){
    echo "Received: ".$data."
";
});

$client->on("error", function($cli){
    echo "Connect failed
";
});

$client->on("close", function($cli){
    echo "Connection closed
";
});

$client->connect('127.0.0.1', 9501);
Salin selepas log masuk

Melalui kod di atas, kami telah melaksanakan contoh komunikasi TCP tak segerak. Apabila pelanggan menghantar mesej, pelayan menerima mesej dan mengembalikan hasil pemprosesan.

Ringkasan:

Artikel ini menerangkan terutamanya amalan Swoole coroutine dan pengaturcaraan tak segerak. Dalam pembangunan aplikasi Internet yang sangat serentak, penggunaan pengaturcaraan tak segerak dan coroutine dapat meningkatkan prestasi sistem dengan berkesan dan meningkatkan kecekapan pembangunan. Rangka kerja Swoole menyediakan sokongan pengaturcaraan coroutine dan tak segerak yang baik, membolehkan pengaturcara melaksanakan pemprosesan tak segerak dan penjadualan coroutine yang cekap dengan mudah, dengan itu meningkatkan keupayaan pemprosesan serentak sistem.

Atas ialah kandungan terperinci Amalan pengaturcaraan coroutine dan tak segerak Swoole. 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