У меня есть сервер сокетов, который прослушивает соединение для входящих данных и записывает исходящие данные во время пауз на входе. Так как это в цикле, я делаю sleep
вызов, чтобы позволить другим процессам иметь некоторое процессорное время, пока мой процесс не ожидает ввода сразу.
я знаю sleep
делает это, но делает usleep
также вернуть выполнение в ОС? Я подозрительно, потому что я знаю, что традиционно sleep
syscall принимает только секунды, и ОЧЕНЬ старая книга, которую я читал о программировании на C десять лет назад, гласит, что «спать» на более коротких интервалах — это такие хаки, как создание бесконечного цикла, по сути имитирующего sleep
вызывать, но не передавать процессорное время другим процессам. (Эта книга, возможно, была неправильной, или, возможно, более не точной, я просто говорю вам, что она сказала.)
Я использую Linux, PHP версии 5.6 и 7.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 за то, что дали мне идею проверить это самостоятельно.
Других решений пока нет …