cpu — Сон и 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 за то, что дали мне идею проверить это самостоятельно.

0

Другие решения

Других решений пока нет …