PHP 프로그램 급 데 몬 구현 및 최적화 사용 개요
2288 단어 데 몬
데 몬 은 배경 에서 계속 실행 되 는 프로 세 스 입 니 다.예 를 들 어 우리 가 시작 한 httpd,my sqld 등 프로 세 스 는 메모리 내 에서 상주 하 는 프로그램 입 니 다.
수요 에 대한 분석:
수요:상주 대기 열 message Queue(redis 메모리 에 있다 고 가정)가 있 습 니 다.이 대기 열 은 비정 기적 으로 대기 열 에 요 소 를 추가 할 수 있 습 니 다.동시에 우 리 는 대기 열 에 요소 가 있 을 때 대기 열 순서에 따라 요 소 를 pop 하여 처리 할 것 을 요구 합 니 다(이 처 리 는 echo'test'일 뿐 이 라 고 가정 합 니 다).
해결 방법:
지금 가설 하면 이미 두 개의 함수 가 있다.
function oPopMessageQueue(){...}/대기 열의 마지막 요 소 를 가 져 옵 니 다.
function vDealElement($element){...}처리 요소;
데 몬 을 써 서 위의 요 구 를 완성 하 라 고 요구 합 니 다.
프로그램:
자,이 프로그램 은 while 순환 으로 할 수 있다 는 것 을 쉽게 생각 할 수 있 습 니 다.
while(true)
{
if( $element = oPopMessageQueue())
{
vDealElement($element);
}
}
1:이 프로그램 이 계속 달리 면 위의 수 요 를 만족 시 킬 수 있 습 니 다.그러나 고려:1 php 프로 세 스 로 달리 면 여러 가지 상황(예 를 들 어 너무 오래 실행)으로 인해 프로 세 스 가 끊 어 질 수 있 습 니 다.그러면 프로그램 이 자동 으로 다시 연결 되 지 않 습 니 다.
방법:cron 사용
우 리 는 정시 스 크 립 트 에서 10 분 마다 프로 세 스 를 실행 합 니 다.
그 다음 에 이 프로그램의 운행 시간 을 10 분 으로 설정 하고 10 분 후에 자동 으로 취소 합 니 다.그래서 코드 는
while(true)
{
if($element = oPopMessageQueue())
{
vCheckTimeLimit();
vDealElement($elemnt);
}
}
$timeStart = 0;
function vCheckTimeLimit()
{
global $timeStart;
if(empty($timeStart))
{
$timeStart = time();
}
if(time() - $timeStart > 60*10)
{
exit;
}
}
고려 2 로 바 뀌 었 습 니 다.이러한 수요 가 있 을 수 있 습 니 다.스 크 립 트 를 수시로 일시 정지 시 키 는 기능 이 필요 합 니 다.그래서 파일 을 사용 하여 일시 정지 기능
while(true)
{
if($element = oPopMessageQueue())
{
vCheckTimeLimit();
vCheckEnd();
vDealElement($elemnt);
}
}
function vCheckEnd()
{
if(file_exists("/home/JesephYe/end"))
{
exit;
}
}
을 추가 하 는 것 을 고려 합 니 다.3.다 중 스 레 드 프로그램 으로 바 꾸 어 실행 효율 을 높 일 수 있 습 니까?이것 은 cron 의 10 분 부터 하나의 프로 세 스 의 제한 을 1 분 마다 하나의 프로 세 스 로 바 꾸 면 됩 니 다.이렇게 하면 10 개의 스 레 드 가 프로그램 을 실행 하고 있 음 을 보장 할 수 있 지만 기본 적 인 요 구 는 oPopMessage Queue()는 원자 작업 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PHP 해결 데 몬 Redis 가사하지만 호황 은 길지 않다.시간 이 좀 지 났 으 니 한 보름 쯤 걸 렸 을 거 예요.운 웨 이 학생 은 레 디 스 대열 의 데이터 가 소비 되 지 않 은 상황 이 발생 했다 고 나 에 게 알려 주 었 다.그리고 나...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.