>  기사  >  PHP 프레임워크  >  Swoole 코루틴의 예비 탐색

Swoole 코루틴의 예비 탐색

coldplay.xixi
coldplay.xixi앞으로
2020-12-18 17:39:237582검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제