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