2017-03-24 1 views
1

나는 소켓 서버가 들어오는 데이터에 대한 연결을 듣고 입력이 일시 중지되는 동안 나가는 데이터를 쓰고있다. 이것은 루프에 있으므로 다른 프로세스가 CPU 시간을 가질 수 있도록하기 위해 sleep 호출을하고 있습니다. 프로세스가 입력을 즉시 기다리지 않고 있습니다.sleep과 usleep은 PHP 내부에서 다르게 동작합니까?

이걸 알고 있는데 sleep이긴하지만 usleep도 OS에 실행을 반환합니까? 나는 전통적으로 sleep syscall 만 초를 허용한다는 것을 알고 있기 때문에 나는 의심 스럽다. 10 년 전에 프로그래밍 한 C 프로그래밍에 대해 읽은 아주 오래된 책은 본질적으로 무한 루프를 만드는 것과 같은 해킹과 관련된 해킹과 관련이 있다고 말했다. sleep하지만 다른 프로세스에 CPU 시간을 양보하지 않습니다. (이 책이 잘못되었거나, 난 그냥 말한 무엇을 말하고 더 이상 정확하지 않을 수 있습니다.) 나는 리눅스를 사용하고

, PHP 버전 5.6 및 7.1

당신에게

+0

OS 수준으로 판단됩니다. http://man7.org/linux/man-pages/man3/usleep.3.html – ceejayoz

+0

테스트 할 수 있습니다. 'usleep (10000)'을 사용하고 CPU 부하를 감시하십시오. – Halcyon

+0

'select' 또는'poll'을 사용하여 입력이 도착하기를 기다릴 수 있습니다. 프로그램이 더 빨리 응답하고 CPU 사용량이 적습니다. – mvds

답변

0

감사합니다 이 플랫폼에 따라 다릅니다 만, 리눅스에서 당신은 시험이 간단한 스크립트를 사용할 수 있습니다 : php test.php & top -d 0.1 처음으로

$start = microtime(true); 

while(true){ 
     while(microtime(true) - $start < .9){} 
} 

//while(true){ 
//  usleep(900000); 
//} 

실행이 거짓 sleep의 모습을 관찰 할 수 top을 검사 한 후 수행 한 양산의 PHP 프로세스를 종료 , com 첫 번째 while 루프를 제거하고 두 번째 주석의 주석을 제거한 후 스크립트를 다시 실행하고 CPU 사용량을 기록하십시오.

나 자신에게 직접 테스트 해 볼 생각을 해준 핼 시온에게 감사드립니다.

관련 문제