PHP 코루틴은 무엇을 의미하나요?
PHP 코루틴은 스레드와 동일합니다. 스레드 컨텍스트를 전환할 때 먼저 이전 스레드의 컨텍스트를 저장한 후 다음 스레드를 실행해야 한다는 의미입니다. 조건이 충족되면 이전 스레드로 다시 전환하고 복원합니다. 코루틴의 경우에도 마찬가지입니다. 단, 코루틴은 사용자에 의해 예약되고 스레드는 시스템에 의해 예약됩니다.
PHP 코루틴 사용법
코루틴 지원은 반복 생성기에 기반하여 생성기로 데이터를 다시 보내는 기능을 추가합니다(호출자는 호출된 생성기 함수에 데이터를 보냅니다).
데이터 전달 기능은 반복자의 send() 메서드를 통해 구현됩니다. 다음 logger() 코루틴은 이 통신이 작동하는 방식입니다. 예:
<?php function logger($fileName) { $fileHandle = fopen($fileName, 'a'); while (true) { fwrite($fileHandle, yield . "\n"); } } $logger = logger(__DIR__ . '/log'); $logger->send('Foo'); $logger->send('Bar') ?>
보시다시피 여기서 Yield는 명령문으로 사용되지 않고 표현식으로 사용됩니다. 즉, 이 값은 호출자가 send() 메서드에 전달하는 값입니다. Yield 표현식은 먼저 "Foo"로 대체되어 Log에 기록된 다음 "Bar"로 대체되어 Log에 기록됩니다.
위의 예는 수신자로서 Yield를 보여줍니다. 다음으로 동시에 수행하는 방법을 살펴보겠습니다. 그리고 전송:
<?php function gen() { $ret = (yield 'yield1'); var_dump($ret); $ret = (yield 'yield2'); var_dump($ret); } $gen = gen(); var_dump($gen->current()); // string(6) "yield1" var_dump($gen->send('ret1')); // string(4) "ret1" (the first var_dump in gen) // string(6) "yield2" (the var_dump of the ->send() return value) var_dump($gen->send('ret2')); // string(4) "ret2" (again from within gen) // NULL (the return value of ->send()) ?>
정확한 출력 순서를 빨리 이해하기가 조금 어려울 수 있지만 나중에 계속 읽을 수 있도록 왜 이렇게 출력되는지 이해해야 합니다. 특별 지적된 두 가지 사항이 있습니다.
첫 번째 사항, PHP7 이전에는 항복 표현식의 양쪽에 있는 괄호가 선택 사항이 아니었습니다. 즉, PHP5.5 및 PHP5.6에서는 괄호가 필수라는 의미입니다.
두 번째 사항은 다음과 같습니다. current()를 호출하기 전에 rewind()가 호출되지 않는 이유는 반복 가능한 객체를 생성할 때 되감기 작업이 암시적으로 수행되기 때문입니다.
권장 튜토리얼: "
PHP Tutorial위 내용은 PHP 코루틴은 무엇을 의미하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!