swoole コルーチンの予備調査

coldplay.xixi
リリース: 2020-12-18 17:39:37
転載
7590 人が閲覧しました

現在 swoole のコルーチンを学習しています。コルーチンの特徴は、同時に実行されるように見えることです。試してみてください。

swoole コルーチンの予備調査

無料推奨: swoole

この記事の前提は、swoole には次のようなものがあります。 Linux にインストールされています。最新バージョンは 4.5.9 (2020-12-17)

要件を構築し、一度に 5 つのコルーチンを作成します。各コルーチンは 1 ~ 3 秒の間の乱数でスリープし、スリープ時間について出力します。すべてのプログラムが終了するときに、プロセス全体が最大 3 秒かかることを願っています。

1.php

foreach (range(1, 5) as $v) {
    go(function () {
        $sleep_time = random_int(1, 3);
        sleep($sleep_time);
        echo "睡眠了" . $sleep_time . "秒\n";
    });}
ログイン後にコピー

php 1.phpを使用して実行するとプログラムは実行できますが、コルーチンという感じではなく同期的に実行されます。実行全体には 3 秒をはるかに超えます。ここには小さなバグがあることが判明しました。プログラム全体に影響を与えることなくこのコルーチン内でスリープできるように、co:sleep を使用する必要があります。

2.php

foreach (range(1, 5) as $v) {
    go(function () {
        $sleep_time = random_int(1, 3);
        co::sleep($sleep_time);
        echo "睡眠了" . $sleep_time . "秒\n";
    });}
ログイン後にコピー

結果は次のとおりです:

睡眠了1秒
睡眠了2秒
睡眠了2秒
睡眠了3秒
睡眠了3秒
ログイン後にコピー

つまり、スリープ時間が短いコルーチンが最初に終了し、同じ時間スリープしているコルーチンが終了する必要があります。文字も同時に出力します。プログラムの終了時にかかった合計時間は 3 秒であり、同時実行が成功したことを示しています。

5 つのコルーチンが終了したら、hello world が出力されることを願っています。

3.php

foreach (range(1, 5) as $v) {
    go(function () {
        $sleep_time = random_int(1, 3);
        co::sleep($sleep_time);
        $a = random_int(1, 1000);
        echo "睡眠了" . $sleep_time . "秒\n";
    });}echo "hello world!\n";
ログイン後にコピー

結果は別の問題であり、hello world が常に最初に出力されます。
したがって、ここではコルーチン コンテナを使用する必要があります。

4.php

Co\run(function () {
    foreach (range(1, 5) as $v) {
        go(function ()  {
            $sleep_time = random_int(1, 3);
            co::sleep($sleep_time);
            echo "睡眠了" . $sleep_time . "秒\n";
        });
    }});echo "hello world!\n";
ログイン後にコピー

結果は次のとおりです:

睡眠了1秒
睡眠了2秒
睡眠了3秒
睡眠了3秒
睡眠了3秒
hello world!
ログイン後にコピー

今回は正しい結果が出力でき、完璧です。
swoole のコルーチンはまだ少し興味深いです ~

以上がswoole コルーチンの予備調査の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート