PHP PHP 8.1 Fibers 고급 사용법
페이지 정보

영삼이
본문
✅ 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 처리까지 포함되진 않지만, 로직을 코루틴처럼 구성 가능
-
비동기 아키텍처 기반 프레임워크 구성의 핵심 도구로 발전 가능
- 이전글실무에서 PHP Trait 남용을 피하는 방법 25.03.28
- 다음글PHP에서 비동기 처리를 흉내내는 방법 25.03.28
댓글목록
등록된 댓글이 없습니다.