개발 지식

개발 지식

PHP PHP 8.1 Fibers 고급 사용법

페이지 정보

profile_image
영삼이
0건 195회 25-03-28 23:16

본문

✅ PHP 8.1 Fibers 고급 사용법

PHP 8.1부터 도입된 Fibers는 PHP에서도 코루틴(Coroutine) 스타일의 비동기 흐름 제어를 가능하게 해주는 기능입니다. 이는 Node.js의 async/await와 유사한 구조를 흉내낼 수 있게 해주며, 비동기 I/O, 비동기 태스크, 사용자 정의 실행 컨텍스트 등에 활용됩니다.


🔍 Fiber란?

  • 중단 가능한 함수 실행 흐름

  • yield와 유사하지만, Fiber::suspend() / Fiber::resume()으로 명시적 제어

  • 비동기 실행 로직을 논리적으로 순차 처리 가능


🧪 기본 사용법

[code=php]
$fiber = new Fiber(function (): void {
    $value = Fiber::suspend('중간에 보냄');
    echo "Fiber 재개됨: $value\n";
});

$result = $fiber->start();
echo "Suspended 결과: $result\n";

$fiber->resume('재개 데이터');
[/code]

출력 결과:

Suspended 결과: 중간에 보냄
Fiber 재개됨: 재개 데이터

🧱 비동기 처리 예제: 지연된 작업

[code=php]
function asyncSleep(int $seconds): Fiber {
    return new Fiber(function () use ($seconds) {
        sleep($seconds);
        Fiber::suspend("{$seconds}초 지남");
    });
}

$fiber = asyncSleep(2);
echo $fiber->start(); // 2초 대기 후 "2초 지남"
[/code]
  • 지연 실행이나 외부 I/O 대기 등에서 유용

  • suspend() 시점에서 제어권 반환, 이후 resume()으로 재개


🔄 다중 Fiber 스케줄링 예시

[code=php]
$fibers = [];

for ($i = 1; $i <= 3; $i++) {
    $fibers[] = new Fiber(function () use ($i) {
        echo "Fiber {$i} 시작\n";
        Fiber::suspend();
        echo "Fiber {$i} 재개\n";
    });
}

foreach ($fibers as $fiber) {
    $fiber->start();
}

foreach ($fibers as $fiber) {
    $fiber->resume();
}
[/code]
  • 여러 Fiber를 생성해 스케줄링 컨트롤 가능

  • 비동기 큐나 코루틴 시스템 구성 시 활용 가능


⚠️ 주의 사항

  • Fiber는 같은 Fiber에서 중첩 실행 불가

  • 컨텍스트 보존을 위해 프레임워크나 라이브러리 수준의 관리 필요

  • Fiber는 직접 비동기 I/O를 제공하지 않으며, 비동기 흐름 제어만 담당


✅ 실무 활용 가능성

  • 비동기 작업 컨트롤러(예: Job Queue)

  • 커스텀 비동기 프레임워크 구성

  • 테스트 프레임워크에서 고립된 컨텍스트 제공

  • Generator + Fiber 조합으로 리액티브 패턴 구성


🧠 요약

  • PHP 8.1부터 지원되는 Fiber는 비동기 흐름 제어 도구

  • I/O 처리까지 포함되진 않지만, 로직을 코루틴처럼 구성 가능

  • 비동기 아키텍처 기반 프레임워크 구성의 핵심 도구로 발전 가능


댓글목록

등록된 댓글이 없습니다.