Сон и usleep ведут себя по-разному внутри, в PHP?
У меня есть сервер сокетов, который прослушивает соединение для входящих данных и записывает исходящие данные во время пауз на входе. Так как это в цикле, я делаю sleep
вызов, чтобы позволить другим процессам иметь некоторое время процессора, пока мой процесс не ожидает ввода данных сразу.
я знаю sleep
делает это, но делает usleep
также вернуть выполнение в ОС? Я подозрительно, потому что я знаю, что традиционно sleep
syscall принимает только секунды, и ОЧЕНЬ старая книга, которую я читал о программировании на C десять лет назад, гласит, что "спать" на более коротких интервалах - это такие хаки, как создание бесконечного цикла для симуляции sleep
вызывать, но не передавать процессорное время другим процессам. (Эта книга, возможно, была неправильной или, возможно, больше не точной, я просто говорю вам, что она сказала.)
Я использую Linux, PHP версии 5.6 и 7.1
благодарю вас
1 ответ
Это зависит от платформы, но в Linux вы можете использовать этот простой скрипт для тестирования:
$start = microtime(true);
while(true){
while(microtime(true) - $start < .9){}
}
//while(true){
// usleep(900000);
//}
Запустить его с php test.php & top -d 0.1
первый раз, чтобы наблюдать, что ложное sleep
похоже, убить порожденный процесс php после проверки top
закомментируй первый while
зациклите и раскомментируйте второй, перезапустите скрипт и запишите загрузку процессора.
Спасибо Halcyon за то, что дали мне идею проверить это самостоятельно.