Apakah kaedah pelaksanaan IO tidak menyekat dalam PHP7.0?

王林
Lepaskan: 2023-05-26 08:51:29
asal
1275 orang telah melayarinya

PHP7.0 ialah bahasa pengaturcaraan popular yang digunakan secara meluas dalam pembangunan web dan pembangunan sisi pelayan. Salah satu kemas kini penting ialah pengenalan I/O yang tidak menyekat. I/O tanpa sekatan ialah teknik pengaturcaraan tak segerak yang boleh mengendalikan berbilang operasi I/O secara serentak tanpa menyekat utas semasa. Teknik ini sangat meningkatkan prestasi dan tindak balas serentak. Artikel ini akan memperkenalkan pelaksanaan I/O tanpa sekatan dalam PHP7.0.

  1. Stream Select

Stream Select ialah salah satu pelaksanaan I/O tanpa sekatan yang paling mudah dalam PHP7.0. Kaedah ini menggunakan panggilan sistem pilih untuk menyemak sama ada semua aliran fail (strim merujuk kepada pemegang fail terbuka, soket, dsb.) mempunyai data yang boleh dibaca dan jika ya, baca data tersebut. Proses ini tidak menyekat dan oleh itu tidak menyekat proses semasa.

Kod untuk menggunakan Stream Select adalah seperti berikut:

$read = array($fp);
$write = array();
$except = array();
if (false === ($num_changed_streams = stream_select($read, $write, $except, 0))) {
    die('Error Occured');
} elseif ($num_changed_streams > 0) {
    //有数据可读
    $data = fread($fp, $buffer_size);
} else {
    //无数据可读
}
Salin selepas log masuk

Kod di atas mula-mula menggunakan fungsi stream_select untuk menyemak sama ada terdapat data yang boleh dibaca, dan jika ya, membaca data tersebut. Proses semakan ini tidak menyekat dan oleh itu tidak menyekat proses semasa.

  1. Gelung Peristiwa

Gelung Peristiwa ialah satu lagi pelaksanaan I/O tidak menyekat yang biasa digunakan dalam PHP7.0. Gelung peristiwa melaksanakan operasi I/O tidak menyekat dengan mendaftarkan fungsi panggil balik acara, yang akan dipanggil apabila peristiwa berlaku. Dalam Gelung Acara, aplikasi mengendalikan operasi I/O dengan menambahkan acara dan memulakan gelung acara. Contohnya, dalam pembangunan web, anda boleh menggunakan Event Loop untuk mengendalikan permintaan HTTP.

Berikut ialah contoh penggunaan Event Loop untuk mengendalikan permintaan HTTP:

$loop = ReactEventLoopFactory::create();
$client = new ReactHttpClientClient($loop);

$request = $client->request('GET', 'http://www.example.com/');
$request->on('response', function ($response) {
    $response->on('data', function ($chunk) {
        echo $chunk;
    });
});
$request->end();

$loop->run();
Salin selepas log masuk

Dalam contoh di atas, objek Event Loop $loop berdasarkan ReactPHP mula-mula dibuat dan kemudian klien HTTP $client dicipta , dan mulakan permintaan GET. Dalam fungsi panggil balik respons permintaan, gunakan gema untuk mengeluarkan data yang diterima.

  1. Coroutine

Coroutine ialah satu lagi pelaksanaan I/O tanpa sekatan yang diperkenalkan dalam PHP7.0. Coroutine menggunakan ciri coroutine untuk menggantung coroutine semasa dan melaksanakan coroutine lain apabila memproses operasi I/O. Apabila operasi I/O selesai, coroutine boleh menyambung semula berjalan dan terus melaksanakan kod berikut. Proses ini tidak menyekat.

Berikut ialah contoh penggunaan Coroutine untuk mengendalikan operasi I/O:

$server = new SwooleServer("127.0.0.1", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);

$server->on('Receive', function ($serv, $fd, $from_id, $data) {
    $result = "";
    $fp = stream_socket_client("tcp://127.0.0.1:80", $errno, $errstr, 30);
    fwrite($fp, $data);
    while (!feof($fp)) {
        $result .= fgets($fp, 1024);
    }
    fclose($fp);
    swoole_coroutine::sleep(0.1);
    $serv->send($fd, $result);
});

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

Dalam kod di atas, mula-mula gunakan sambungan Swoole untuk mencipta objek pelayan TCP $server. Dalam fungsi panggil balik yang menerima data klien, gunakan fungsi stream_socket_client untuk memulakan permintaan HTTP dan gunakan gelung sementara untuk membaca data respons. Semasa proses membaca data, gunakan swoole_coroutine::sleep(0.1) untuk menjeda pelaksanaan coroutine semasa dan menunggu pelaksanaan coroutine lain. Apabila data tindak balas dibaca dengan jayanya, data dihantar semula kepada klien.

Kesimpulan

PHP7.0 memperkenalkan pelbagai kaedah pelaksanaan I/O tanpa sekatan, termasuk Pilih Strim, Gelung Acara, Coroutine, dsb. Teknologi ini membolehkan aplikasi PHP mengendalikan berbilang operasi I/O pada masa yang sama, meningkatkan prestasi serentak dan kelajuan tindak balas. Banyak rangka kerja dan perpustakaan PHP, seperti ReactPHP dan Swoole, telah menyepadukan teknologi I/O yang tidak menyekat ini untuk membantu pembangun menulis aplikasi web berprestasi tinggi.

Atas ialah kandungan terperinci Apakah kaedah pelaksanaan IO tidak menyekat dalam PHP7.0?. 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