>  기사  >  PHP 프레임워크  >  Swoole 작업이 차단됩니까?

Swoole 작업이 차단됩니까?

(*-*)浩
(*-*)浩원래의
2019-12-16 09:18:312884검색

Swoole 작업이 차단됩니까?

Swoole 작업 문서를 주의 깊게 읽으셨다면 이 문장을 눈치채셨을 것입니다.

작업 작업 횟수는 onTask 처리 속도보다 작아야 합니다. 전달 용량이 처리 용량을 초과하면 작업이 채워집니다. 캐시 영역이 손상되어 작업자 프로세스가 차단됩니다.

작업자 프로세스는 새로운 요청을 받을 수 없습니다                                                            (권장 학습: swoole 비디오 튜토리얼

)

task 차단되면 Waker 프로세스가 차단되어 서비스가 작동하지 않아 문제가 발생합니다.

서비스의 링크 로그를 보내는 작업을 사용한 적이 있습니다. 로그를 받은 서비스에 버그가 발생하여 로그를 보내는 작업이 차단된 후 gg를 제공했습니다. 작업 최적화.

Swoole 채널과 Swoole 사용자 프로세스를 사용하여 일련의 작업을 구현하는 것이 아이디어입니다.

채널을 사용하여 데이터를 수신한 후 사용자 프로세스에서 데이터를 소비합니다. 채널이 가득 차면 푸시 데이터만 실패할 뿐이며 링크 로그이므로 손실이 발생하지 않습니다. 허용되므로 이 솔루션은 완전히 괜찮습니다.

Swoole 사용자 프로세스에서 채널 소비 전략의 의사 코드는 다음과 같습니다

$sleepTime = 5;
$maxSleepTime = 100;
while (true) {
    $task = $chan->pop();
    if ($task === false) {
        $sleepTime = $sleepTime + 5;
        if ($sleepTime > $maxSleepTime) {
            $sleepTime = $maxSleepTime;
        }
        usleep($sleepTime * 1000);
        continue;
    }
    $sleepTime = 0;
    // 处理数据
}

채널 데이터가 소비되면 데이터 처리 중에 다른 작업이 있기 때문에 무한 루프를 사용합니다. CPU를 많이 차지하지 않습니다.

데이터를 소비할 수 없는 경우 5ms를 슬립하고 최대 100ms에 도달할 때까지 슬립 시간을 순차적으로 누적하여 CPU 사용량과 실시간 데이터 처리 사이의 균형을 맞추도록 합니다. 귀하의 비즈니스 요구에 따라.

위 내용은 Swoole 작업이 차단됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.