현재 위치: > 최신 기사 목록> Time_nanoSleep을 사용하여 0.5 초마다 폴링 큐 작업을 구현하십시오.

Time_nanoSleep을 사용하여 0.5 초마다 폴링 큐 작업을 구현하십시오.

gitbox 2025-05-29

실제 개발에서 폴링은 특히 대기열 작업을 처리 할 때 일반적인 작업 예약 방식입니다. PHP는 장기 기억에 적합한 자연 언어는 아니지만 합리적인 시간 제어와 결합 된 CLI 모드에서 비교적 정확한 폴링 제어를 달성 할 수 있습니다. 이 기사는 PHP의 Time_NanoSleep 기능을 사용하여 0.5 초마다 정확한 폴링 큐 작업을 구현하는 방법을 소개합니다.

1. Time_nanoSleep을 선택하는 이유는 무엇입니까?

PHP는 수면 , 수면Time_NanoSleep 과 같은 실행을 지연시키는 여러 기능을 제공합니다. 안에:

  • 수면 (int $ 초)은 몇 초만에만 사용할 수 있으며 정확도가 낮습니다.

  • usleep (int $ micro_seconds)는 마이크로 초를 지원할 수 있지만 인터럽트를 처리 할 수는 없습니다.

  • time_nanosleep (int $ seconds, int $ nanoseconds)는 나노 초 수준 지연을 제공하고 중단 될 때 나머지 시간을 반환 할 수 있으며 고정밀 제어에 적합합니다.

따라서 "0.5 초마다 폴링"이라는 목표를 달성하기 위해 Time_nanoSleep은 더 이상적인 선택입니다.

2. 기본 문법

 bool time_nanosleep(int $seconds, int $nanoseconds)

이 기능은 지정된 시간이 경과 할 때까지 현재 스크립트의 실행을 일시 중지합니다. 나노 초의 값 범위는 0 ~ 999,999,999입니다.

3. 폴링 대기열 구현의 예

다음은 Time_NanoSleep을 사용하여 0.5 초마다 작업 대기열을 구현하는 PHP 스크립트입니다.

 <?php

function pollQueue()
{
    // 작업 대기열에서 작업을 얻으려면 시뮬레이션하십시오(실제 대기열 읽기 로직으로 바꾸십시오)
    $task = file_get_contents('https://gitbox.net/api/queue/next');

    if ($task) {
        echo "작업을 처리합니다: {$task}\n";
        // 시뮬레이션 작업 처리
        file_get_contents('https://gitbox.net/api/queue/acknowledge?id=' . urlencode($task));
    } else {
        echo "현재 작업이 없습니다,대기 중...\n";
    }
}

// 계속 실행하십시오
while (true) {
    $start = microtime(true);
    
    pollQueue();

    $end = microtime(true);
    $elapsed = $end - $start;

    // 작업 처리가보다 적은 경우 0.5 두번째,하지만 sleep 남은 시간
    $remaining = 0.5 - $elapsed;
    if ($remaining > 0) {
        $seconds = floor($remaining);
        $nanoseconds = ($remaining - $seconds) * 1e9;
        time_nanosleep($seconds, (int)$nanoseconds);
    }
}

4. 주목할만한 것들

  1. 예외 처리 : Time_NanoSleep은 신호에 의해 중단 될 수 있습니다. 반환 값을 처리하기 위해 예외 또는 인터럽트 감지를 추가하는 것이 좋습니다.

  2. 높은 동시성 시나리오 : 폴링 방법은 높은 동시성 또는 지연에 민감한 작업에 적합하지 않습니다. RabbitMQ 및 Redis 스트림과 같은 메시지 대기열과 함께 사용하는 것이 좋습니다.

  3. CPU 점유 통제 : 시간이 정해진 폴링은 일정량의 CPU 점유를 유발할 수 있으며 리소스 모니터링 메커니즘을 추가하는 것이 좋습니다.

V. 결론

PHP는 일반적으로 고정밀 작업 스케줄링에 사용되지 않지만 Time_nanoSleep 기능을 사용하여 간결하고 효과적인 작업 폴링 메커니즘을 구축 할 수 있습니다. 위의 예는 특정 비즈니스 요구에 따라 확장되고 최적화 될 수있는 기본 프레임 워크를 제공합니다. 소규모 가벼운 작업 관리 시나리오 에서이 방법은 효율적이고 유연합니다.