현재 위치: > 최신 기사 목록> PHP 비동기 프로그래밍 연습 : 동시성 성능을 향상시키기 위해 이벤트 루프 및 콜백 사용

PHP 비동기 프로그래밍 연습 : 동시성 성능을 향상시키기 위해 이벤트 루프 및 콜백 사용

M66 2025-10-07

PHP 비동기 프로그래밍 개요

기존의 PHP 프로그래밍 모드에서 코드는 일반적으로 순차적으로 실행됩니다. 즉, 각 작업은 계속되기 전에 이전 작업이 완료 될 때까지 기다려야합니다. 비동기 프로그래밍을 통해 기본 스레드를 차단하지 않고도 여러 작업이 동시에 실행될 수 있으므로 응용 프로그램 성능 및 응답 속도가 크게 향상됩니다.

PHP의 비동기 프로그래밍은 이벤트 루프 및 콜백 기능을 통해 구현할 수 있습니다. 이 메커니즘은 높은 일환 네트워크 서비스, 실시간 시스템 및 타이밍 작업에 널리 사용됩니다.

libev를 사용하여 이벤트 루프를 구현하십시오

Libev는 이벤트를 듣고 트리거 될 때 해당 콜백을 실행할 수있는 효율적인 이벤트 루프 메커니즘을 제공하는 확장 된 PHP 라이브러리입니다. libev 사용을 시작하려면 확장자를 먼저 설치 한 다음 다음 코드로 이벤트 루프를 초기화해야합니다.

 require 'vendor/autoload.php';

$loop = new \LibEv\EventLoop();

위의 코드는 네트워크 이벤트, 타이머 또는 기타 I/O 작업을 듣는 데 사용되는 이벤트 루프 객체를 만듭니다.

비동기 네트워크 프로그래밍 예

다음 예제는 Libev를 사용하여 기본 스레드를 차단하지 않고도 여러 클라이언트 연결을 동시에 처리 할 수있는 간단한 비동기 웹 서버를 작성하는 방법을 보여줍니다.

 use \LibEv\EventLoop;
use \LibEv\IO\Stream\Server;

$loop = new EventLoop();

$server = new Server($loop, '127.0.0.1', 8080);
$server->on('connection', function(Server $server, Stream $client) {
  echo 'New client connected';
});

$loop->run();

이 예제의 서버는 포트 8080에 리시는 다음 새 연결이 감지되면 콜백 함수를 실행합니다. 동시에, 이벤트 루프는 계속 실행되므로 여러 연결의 동시 처리를 지원합니다.

비동기 타이머 예제

비동기 프로그래밍에서 타이머는 매우 일반적인 기능입니다. 지정된 시간 간격 후에 자동 콜백을 트리거 할 수 있습니다. 다음 예제는 libev를 사용하여주기적인 타이머를 만드는 방법을 보여줍니다.

 use \LibEv\EventLoop;
use \LibEv\Timer;

$loop = new EventLoop();

$timer = new Timer($loop, 1.0, true); // 그 밖의 모든 1 몇 초 만에 한 번 실행하십시오
$timer->on('timeout', function(Timer $timer) {
  echo 'Timer has timed out';
});

$loop->run();

이 타이머는 매 초마다 콜백을 실행하며 로그 새로 고침, 리소스 모니터링 또는 작업 스케줄링과 같은주기적인 작업을 수행하는 데 사용할 수 있습니다.

요약

PHP는 이벤트 루프 및 콜백 메커니즘을 사용함으로써 진정한 비동기 프로그래밍을 구현할 수있어 응용 프로그램의 응답 속도 및 동시 처리 기능이 크게 향상됩니다. Libev 확장을 통해 개발자는 비동기 네트워크 서버, 타이밍 작업 및 다양한 사용자 정의 이벤트 중심 애플리케이션을 쉽게 구축하여 PHP 응용 프로그램에 더 높은 성능과 확장 성을 제공 할 수 있습니다.