Rumah >rangka kerja php >Swoole >Amalan pengaturcaraan coroutine dan tak segerak Swoole
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
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
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 ";
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); }
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.
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
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();
<?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);
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!