PHP 8.1에 Fibers가 도입되었을 때 많은 개발자들은 이것이 단일 스레드, 동기식 언어로서 PHP의 오랜 한계에 대한 솔루션인지 궁금해했습니다. Fibers는 이벤트 루프가 있는 JavaScript나 Node.js처럼 PHP를 비동기식으로 만들 수 있습니까? 대답은 미묘합니다. Fiber는 진정한 비동기 실행을 제공하지 않지만 작업을 보다 효율적으로 관리하기 위한 강력한 도구입니다. 이 개념을 자세히 살펴보겠습니다.
파이버는 PHP에서 협력적 멀티태스킹을 구현하기 위한 메커니즘입니다. 전체 PHP 프로세스를 차단하지 않고도 코드의 특정 부분을 일시 중지하고 재개할 수 있습니다. Fiber를 기본 프로그램에 다시 제어권을 "양보"한 다음 요청 시 중단된 부분부터 실행을 계속할 수 있는 특수 기능으로 생각하십시오.
Fiber::suspens()를 사용하여 Fiber를 일시 중지하면 제어가 기본 PHP 스크립트로 돌아갑니다. 이는 다음을 의미합니다.
예:
$fiber = new Fiber(function () { echo "Fiber started\n"; Fiber::suspend(); echo "Fiber resumed\n"; }); echo "Before Fiber\n"; $fiber->start(); echo "After Fiber Start\n"; $fiber->resume(); echo "After Fiber Resume\n"; Output:
Before Fiber Fiber started After Fiber Start Fiber resumed After Fiber Resume
현재 상황은 다음과 같습니다.
예, 하지만 일시적으로만 가능합니다. Fiber::resume()을 호출하면 Fiber는 기본 PHP 프로세스 내에서 동기식으로 실행됩니다. 이 기간 동안:
$fiber = new Fiber(function () { echo "Processing Fiber...\n"; sleep(2); // Simulates a blocking task echo "Fiber Done\n"; }); echo "Before Fiber\n"; $fiber->start(); echo "Between Fiber Start and Resume\n"; $fiber->resume(); echo "After Fiber\n"; Output:
Before Fiber Processing Fiber... Fiber Done Between Fiber Start and Resume After Fiber
여기서 Fiber는 sleep(2) 호출 중에 주요 프로세스를 차단합니다. 따라서 Fibers는 효율성을 위해 코드를 구조화하는 방법을 제공하지만 마술처럼 병렬 또는 진정한 비동기 실행을 지원하지는 않습니다.
'비차단'이라는 용어는 Fiber가 병렬 실행이 아닌 더 나은 작업 관리를 가능하게 하는 방법을 나타냅니다. Fiber는 일시 중지된 동안 기본 프로세스를 차단하지 않습니다. 대신 제어권이 메인 스크립트나 이벤트 루프로 다시 전달됩니다.
이 기능은 ReactPHP 또는 Amp와 같은 이벤트 기반 아키텍처를 사용하는 라이브러리나 프레임워크에 특히 유용합니다.
당신이 여러 요리를 준비하는 요리사라고 상상해 보세요.
요리를 시작하다가 뭔가가 끓을 때까지 잠시 기다립니다.
기다리는 동안 다른 요리를 준비하기 시작합니다.
첫 번째 요리가 준비되면 다시 그 요리로 돌아가 요리를 계속합니다.
마찬가지로 Fibers를 사용하면 PHP가 작업을 '일시 중지'하고 전체 프로세스를 중단하지 않고 나중에 해당 작업으로 돌아갈 수 있습니다.
스레드나 이벤트 루프를 사용하여 작업을 병렬로 실행할 수 있는 JavaScript 또는 Node.js의 비동기 프로그래밍과 달리 Fibers는 다음을 수행합니다.
즉,
Fiber는 병렬성을 도입하지 않습니다(작업은 여전히 한 번에 하나씩 실행됩니다).
비차단 코드를 보다 효율적으로 관리하고 구성하기 위한 도구입니다.
PHP Fibers는 PHP를 진정한 비동기식으로 만들지는 못하지만 언어에 강력한 추가 기능을 제공합니다.
위 내용은 PHP 파이버란 무엇입니까? PHP Fiber는 실제로 비동기 실행을 제공합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!