Rumah > rangka kerja php > Swoole > Amalan Swoole: Cara menggunakan coroutine untuk mengoptimumkan akses serentak berbilang proses

Amalan Swoole: Cara menggunakan coroutine untuk mengoptimumkan akses serentak berbilang proses

WBOY
Lepaskan: 2023-06-13 21:41:38
asal
1314 orang telah melayarinya

Apabila aplikasi web menjadi lebih kompleks, akses kepada pemprosesan serentak dan pengoptimuman prestasi menjadi semakin penting. Dalam kebanyakan kes, menggunakan berbilang proses atau utas untuk mengendalikan permintaan serentak adalah penyelesaiannya. Walau bagaimanapun, dalam kes ini, isu seperti penukaran konteks dan penggunaan memori perlu dipertimbangkan.

Dalam artikel ini, kami akan memperkenalkan cara menggunakan Swoole dan coroutine untuk mengoptimumkan akses serentak berbilang proses. Swoole ialah enjin komunikasi rangkaian tak segerak coroutine berdasarkan PHP, yang membolehkan kami melaksanakan komunikasi rangkaian berprestasi tinggi dengan sangat mudah.

Pengenalan kepada Swoole Coroutine

Coroutine ialah utas ringan yang boleh dijalankan dalam satu utas, mengelakkan isu prestasi yang disebabkan oleh penukaran konteks dan penggunaan memori. Coroutine Swoole memanfaatkan ciri penjana (Generator) dan Coroutine (Coroutine) yang diperkenalkan dalam PHP 5.5 dan versi yang lebih baru.

Dalam Swoole, kita boleh mencipta coroutine melalui fungsi swoole_coroutine_create(), menggunakan fungsi swoole_coroutine_yield() untuk menjeda pelaksanaan coroutine dan menggunakan fungsi swoole_coroutine_resume() untuk menyambung semula pelaksanaan coroutine.

Gunakan coroutine untuk mengoptimumkan akses serentak oleh berbilang proses

Ciri coroutine Swoole boleh mengoptimumkan prestasi akses serentak oleh berbilang proses. Kita boleh merangkum kod untuk mengendalikan permintaan serentak dalam coroutine, dan kemudian menggunakan penjadual coroutine yang disediakan oleh Swoole untuk bertukar antara coroutine.

Berikut ialah contoh mudah yang menunjukkan cara menggunakan ciri coroutine Swoole untuk melaksanakan permintaan selari dan hasil pengembalian apabila semua permintaan selesai.

<?php
use SwooleCoroutineHttpClient;

function parallel_requests(array $urls)
{
    $results = [];

    foreach ($urls as $url) {
        // 创建一个协程
        go(function () use ($url, &$results) {
            $client = new Client(parse_url($url));
            $client->set(['timeout' => 1]);
            $client->get('/');

            // 将结果存储在$results数组中
            $results[$url] = $client->statusCode;
            $client->close();
        });
    }

    // 等待所有协程完成
    while (count($results) < count($urls)) {
        usleep(1000);
    }

    return $results;
}

// 并行发送10个HTTP请求
$results = parallel_requests([
    'http://localhost:8000/',
    'http://localhost:8000/',
    'http://localhost:8000/',
    'http://localhost:8000/',
    'http://localhost:8000/',
    'http://localhost:8000/',
    'http://localhost:8000/',
    'http://localhost:8000/',
    'http://localhost:8000/',
    'http://localhost:8000/',
]);

var_dump($results);
Salin selepas log masuk

Dalam contoh di atas, kami mula-mula mentakrifkan fungsi parallel_requests() yang menerima tatasusunan URL sebagai input, menjana coroutine untuk mengendalikan setiap permintaan URL dan mengembalikan hasilnya apabila semua permintaan selesai . Kami menggunakan fungsi go() yang disediakan oleh Swoole untuk mencipta coroutine dan menggunakan tatasusunan $results untuk menyimpan hasil setiap permintaan. Selepas semua permintaan selesai, fungsi parallel_requests() akan mengembalikan tatasusunan $results.

Di dalam coroutine, kami menggunakan kelas CoroutineHttpClient yang disediakan oleh Swoole untuk menghantar permintaan HTTP. Disebabkan penggunaan coroutine, apabila permintaan disekat, coroutine akan bertukar kepada permintaan lain, dengan itu mencapai permintaan selari.

Dalam gelung while, kami menunggu semua permintaan selesai. Disebabkan penggunaan coroutine, kod ini tidak menyekat keseluruhan proses, tetapi membenarkan coroutine lain untuk dilaksanakan.

Ringkasan

Dalam artikel ini, kami memperkenalkan cara menggunakan Swoole dan coroutine untuk mengoptimumkan akses serentak berbilang proses. Coroutine ialah utas ringan yang boleh dijalankan dalam satu utas, mengelakkan isu prestasi yang disebabkan oleh penukaran konteks dan penggunaan memori. Dengan mengendalikan permintaan serentak dalam coroutine dan menggunakan penjadual coroutine yang disediakan oleh Swoole untuk bertukar antara coroutine, prestasi aplikasi rangkaian boleh dipertingkatkan dengan berkesan.

Jika anda sedang mencari enjin komunikasi rangkaian berprestasi tinggi dan sudah biasa dengan bahasa pengaturcaraan PHP, maka Swoole ialah pilihan yang baik.

Atas ialah kandungan terperinci Amalan Swoole: Cara menggunakan coroutine untuk mengoptimumkan akses serentak berbilang proses. 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