Fibers

(PHP 8 >= 8.1.0)

파이버는 전체 스택의 인터럽트 가능한 함수를 나타냅니다. 파이버는 호출 스택의 어느 곳에서나 일시 중단되어 파이버가 나중에 재개될 때까지 광섬유 내에서 실행을 일시 중지할 수 있습니다.

Fiber는 전체 실행 스택을 일시 중지하므로 함수의 직접 호출자는 함수 호출 방법을 변경할 필요가 없습니다.

Fiber::suspend()를 사용하여 호출 스택의 어디에서나 실행이 중단될 수 있습니다(즉, Fiber::suspend()에 대한 호출이 깊이 중첩된 함수에 있거나 아예 존재하지 않을 수도 있음).

스택이 없는 생성기와 달리 각 Fiber에는 자체 호출 스택이 있어 깊이 중첩된 함수 호출 내에서 일시 중지할 수 있습니다. 인터럽트 지점을 선언하는 함수(즉, Fiber::suspend() 호출)는 생성기 인스턴스를 반환해야 하는 yield를 사용하는 함수와 달리 반환 유형을 변경할 필요가 없습니다.

파이버는 array_map()에 제공되는 함수 또는 Iterator 객체의 foreach에서 호출하는 메서드와 같이 PHP VM 내에서 호출되는 함수를 포함하여 모든 함수 호출에서 일시 중단될 수 있습니다.

일시 중단되면 Fiber::resume()을 사용하거나 Fiber::throw()를 사용하여 Fiber에 예외를 throw하여 모든 값으로 Fiber 실행을 재개할 수 있습니다. Fiber::suspend()에서 값이 반환되거나 예외가 발생합니다.

예제 #1 기본 사용법

                  
<?php
$fiber = new Fiber(function (): void {
   $value = Fiber::suspend('fiber');
   echo "Value used to resume fiber: ", $value, PHP_EOL;
});

$value = $fiber->start();

echo "Value from fiber suspending: ", $value, PHP_EOL;

$fiber->resume('test');
?>
                  
                

위의 예는 다음을 출력합니다.

Value from fiber suspending: fiber
Value used to resume fiber: test