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()는 원자 작업 입 니 다.

좋은 웹페이지 즐겨찾기