> 백엔드 개발 > PHP 튜토리얼 > PHP 파이버란 무엇입니까? PHP Fiber는 실제로 비동기 실행을 제공합니까?

PHP 파이버란 무엇입니까? PHP Fiber는 실제로 비동기 실행을 제공합니까?

DDD
풀어 주다: 2024-12-02 19:59:16
원래의
849명이 탐색했습니다.

What is PHP Fiber? Does PHP Fiber Really Give You Asynchronous Execution?

PHP 8.1에 Fibers가 도입되었을 때 많은 개발자들은 이것이 단일 스레드, 동기식 언어로서 PHP의 오랜 한계에 대한 솔루션인지 궁금해했습니다. Fibers는 이벤트 루프가 있는 JavaScript나 Node.js처럼 PHP를 비동기식으로 만들 수 있습니까? 대답은 미묘합니다. Fiber는 진정한 비동기 실행을 제공하지 않지만 작업을 보다 효율적으로 관리하기 위한 강력한 도구입니다. 이 개념을 자세히 살펴보겠습니다.

PHP 섬유란 무엇입니까?

파이버는 PHP에서 협력적 멀티태스킹을 구현하기 위한 메커니즘입니다. 전체 PHP 프로세스를 차단하지 않고도 코드의 특정 부분을 일시 중지하고 재개할 수 있습니다. Fiber를 기본 프로그램에 다시 제어권을 "양보"한 다음 요청 시 중단된 부분부터 실행을 계속할 수 있는 특수 기능으로 생각하십시오.

섬유의 주요 특징:

  • 실행을 시작, 일시 중지, 재개할 수 있습니다.
  • 동일한 PHP 프로세스 내에서 작동하며 멀티스레딩을 도입하지 않습니다.
  • 비차단 코드를 구성하는 데 특히 유용합니다.

Fiber가 일시 중지되면 어떻게 되나요?

Fiber::suspens()를 사용하여 Fiber를 일시 중지하면 제어가 기본 PHP 스크립트로 돌아갑니다. 이는 다음을 의미합니다.

  • 주 프로세스는 프로그램의 다른 부분을 계속해서 자유롭게 실행할 수 있습니다.
  • Fiber의 실행을 일시적으로 중단하고 이력서() 호출을 기다립니다.

예:

$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::suspens()는 Fiber를 일시 중지합니다. $섬유->start() 이후 실행이 기본 스크립트로 다시 전환됩니다.
  • 메인 스크립트는 계속 실행됩니다(“Fiber 시작 후”).
  • resume()이 호출되면 Fiber는 중단된 부분부터 시작하여 작업을 완료합니다.

Fiber를 재개하면 기본 프로세스가 차단됩니까?

예, 하지만 일시적으로만 가능합니다. Fiber::resume()을 호출하면 Fiber는 기본 PHP 프로세스 내에서 동기식으로 실행됩니다. 이 기간 동안:

  • Fiber가 완료되거나 다시 일시 중지될 때까지 스크립트(또는 다른 Fiber)의 다른 부분을 실행할 수 없습니다.
  • PHP가 단일 스레드로 유지되기 때문에 Fiber 실행이 차단됩니다. 예를 들어:
$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와 같은 이벤트 기반 아키텍처를 사용하는 라이브러리나 프레임워크에 특히 유용합니다.

  • 오래 실행되거나 대기 중인 작업(예: 데이터베이스 쿼리, API 호출)은 일시 중지될 수 있습니다.
  • 그동안 다른 작업을 계속 실행할 수 있습니다.
  • 작업이 준비되면 Fiber가 재개되고 실행이 계속됩니다.

당신이 여러 요리를 준비하는 요리사라고 상상해 보세요.
요리를 시작하다가 뭔가가 끓을 때까지 잠시 기다립니다.
기다리는 동안 다른 요리를 준비하기 시작합니다.
첫 번째 요리가 준비되면 다시 그 요리로 돌아가 요리를 계속합니다.

마찬가지로 Fibers를 사용하면 PHP가 작업을 '일시 중지'하고 전체 프로세스를 중단하지 않고 나중에 해당 작업으로 돌아갈 수 있습니다.

파이버가 진정한 비동기식이 아닌 이유

스레드나 이벤트 루프를 사용하여 작업을 병렬로 실행할 수 있는 JavaScript 또는 Node.js의 비동기 프로그래밍과 달리 Fibers는 다음을 수행합니다.

  • 단일 PHP 프로세스 내에서 동기적으로 실행됩니다.
  • 개발자가 작업 일시 중지 및 재개를 수동으로 제어할 수 있도록 하여 협력적인 멀티태스킹을 제공합니다.

즉,
Fiber는 병렬성을 도입하지 않습니다(작업은 여전히 ​​한 번에 하나씩 실행됩니다).
비차단 코드를 보다 효율적으로 관리하고 구성하기 위한 도구입니다.
PHP Fibers는 PHP를 진정한 비동기식으로 만들지는 못하지만 언어에 강력한 추가 기능을 제공합니다.

위 내용은 PHP 파이버란 무엇입니까? PHP Fiber는 실제로 비동기 실행을 제공합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿