두 가지 일반적인 타이머가 있습니다. 하나는 주기적으로 실행됩니다. 예를 들어 매일 오전 3시에 보고서가 발행되고, 다른 하나는 지정된 시간(1회) 후에 실행됩니다. 예를 들어 일일 로그인 보상이 발행됩니다. 구성원이 시스템에 로그인한 후 5분. 두 가지 상황은 쉘의 cron 및 at 명령에 해당하며 이는 JavaScript의 setInterval 및 setTimeout 함수와 유사합니다(엄격히 말하면 setInterval은 주기적으로 실행되며 지정된 시점의 실행은 자체적으로 처리해야 함).
웹 개발을 하는 PHP 프로그래머는 JavaScript의 두 가지 타이머 기능에 익숙해야 합니다. PHP 수준으로 돌아가는 것은 약간 어리둥절합니다.
PHP에는 절전 모드가 있지만 (내장된) 타이머 기능이 없습니다. 사용 가능. 슬립 기능은 거의 할 수 없지만 이 기간 동안 프로세스가 차단되고 다른 작업을 수행할 수 없습니다(또는 응답하지 않게 됨). PHP는 왜 타이머 기능을 제공하지 않습니까?
Reason
개인적으로 PHP가 웹 개발에서 타이머를 사용할 수 없는 근본적인 이유는 제어 가능한 상주 메모리 운영 환경이 부족하기 때문이라고 생각합니다. 두 가지 핵심 사항: 첫째, 상주 메모리, 둘째, 제어 가능. CGI 모드에서는 프로세스가 스크립트 실행 후 바로 종료되며 지정된 시간에 작업이 실행될 것으로 예상할 수 없습니다. PHP-FPM 모드에서는 프로세스가 (대부분) 메모리에 상주하지만 제어할 수 없습니다.
Uncontrollable은 PHP를 실행하는 프로세스가 PHP 코드의 영향을 받지 않으며 프로세스의 진입점과 종료 시점이 추가 프로그램에 의해 제어된다는 의미입니다. 예를 들어 FPM 모드에서 PHP 스크립트의 종료 및 다이 기능은 스크립트 실행을 중단할 뿐이며 스크립트 실행 프로세스에 특별한 영향을 미치지 않습니다(메모리 누수 제외). PHP 개발자가 작성한 스크립트는 프로세스의 실행 본문이며 실행 후 프로세스의 실행 컨텍스트에서 언로드됩니다. 이 경우 PHP 스크립트를 실행하는 타이밍은 여전히 외부에 의해 좌우됩니다. 외부 요청이 없으면 PHP 코드는 아무 작업도 하지 않고 조용히 하드 디스크에 놓여 예약된 작업이 됩니다.
PHP는 주로 웹 개발을 지향하기 때문에 PHP의 실행 모드는 안정적이고 신뢰할 수 있으며 개발 효율성이 빠릅니다. 예를 들어 리소스 릴리스 단계를 생략하면 개발 시 많은 작업량과 함정을 피할 수 있습니다. 시간대, 문자 인코딩 등을 변경하고 이를 복원하지 않는 일부 타사 라이브러리 코드를 생각해 보십시오. 상주 메모리 실행 환경에서는 후속 요청에 문제가 발생할 것이 거의 확실합니다. 그러나 FPM 모드에서는 이 함정이 의도치 않게 완화되어 디버깅 시간을 많이 절약하고 프로그래머의 헤어라인 유지 능력에 상당한 기여를 합니다.
위 내용은 PHP가 타이머를 지원하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!