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 중국어 웹사이트의 기타 관련 기사를 참조하세요!