728x90
안녕하세요.
오늘은 PHP 8.1부터 도입된 기능인 Fiber 에 대해 알아보겠습니다.
PHP 는 기본적으로 코드를 한줄 한줄 순서대로 실행합니다.
이 방식은 I/O 작업(외부 API를 호출하거나, 데이터베이스에 쿼리를 보내거나, 큰 파일 읽기와 같은 기다림이 필요한 작업)에서 문제가 발생합니다.
'기다리는 시간' 동안 아무것도 하지 않고 CPU를 낭비하며 멍하니 멈춰있습니다.
1초가 걸리는 API를 호출하면, PHP 스크립트 전체가 1초 동안 멈추게 됩니다.
Fiber 는 이와 같은 상황에서 특정 작업을 일시 중단(Suspend) 시킬 수 있습니다.
즉, 기다리는 동안 다른 작업을 먼저 처리할 수 있도록 합니다.
예제
<?php
// Fiber 생성: 'Fiber 내부'에서 실행될 코드를 정의합니다.
$fiber = new Fiber(function(): void {
echo "Fiber 시작! (작업 1)\n";
// "나 잠깐 쉴게!"라고 외치며 메인 코드로 제어권을 넘김
Fiber::suspend();
echo "Fiber 재개! (작업 3)\n";
});
// 메인 코드 실행
echo "메인 코드 시작 (작업 0)\n";
// Fiber를 처음 실행시킵니다.
$fiber->start();
// Fiber가 suspend()로 멈춘 동안, 메인 코드는 다른 일을 합니다.
echo "메인 코드 실행 중... (작업 2)\n";
// Fiber를 멈췄던 지점부터 다시 실행시킵니다.
$fiber->resume();
echo "메인 코드 종료 (작업 4)\n";
?>
결과
메인 코드 시작 (작업 0)
Fiber 시작! (작업 1)
메인 코드 실행 중... (작업 2)
Fiber 재개! (작업 3)
메인 코드 종료 (작업 4)
코드가 위에서 아래로 순차적으로 실행되지 않고, Fiber와 메인 코드가 실행을 주고받는 것을 확인할 수 있습니다.
'PHP' 카테고리의 다른 글
| [PHP] levenshtein로 유사 검색어 추천 기능 만들기 (0) | 2025.10.29 |
|---|---|
| [PHP] Constructor Property Promotion (생성자 속성 승격) (0) | 2025.10.27 |
| [PHP] match 표현식 (0) | 2025.10.20 |
| [PHP] SplMaxHeap 가장 큰 값이 항상 맨 위에 위치하는 자료구조 (0) | 2025.10.19 |
| [PHP] SplPriorityQueue로 중요 작업 먼저 처리하기 (0) | 2025.10.16 |