Подтвердить что ты не робот

В чем разница между sleep(), usleep() и [NSThread sleepForTimeInterval:]?

Может ли кто-нибудь объяснить мне, в чем разница между sleep(), usleep() и [NSThread sleepForTimeInterval:]?

Какое наилучшее условие для использования этих методов?

4b9b3361

Ответ 1

sleep (3) является стандартным библиотечным методом posix, который пытается приостановить вызывающий поток на время, указанное в секундах. usleep (3) делает то же самое, за исключением того, что вместо этого требуется время в микросекундах. Оба они фактически реализованы с помощью системного вызова nanosleep (2).

Последний метод делает то же самое, кроме того, что он является частью фреймворка Foundation, а не является вызовом библиотеки C. Он принимает NSTimeInterval, который представляет количество времени, которое нужно спать, как двойной, указывающий секунды и доли секунды.

Для всех целей и задач все они выполняют функционально то же самое, т.е. пытаются приостановить вызывающий поток за определенный промежуток времени.

Ответ 2

Какое лучшее условие для использования эти методы?

Никогда

Или, действительно, почти наверняка никогда не бывает за пределами самых уникальных обстоятельств.

Что вы пытаетесь сделать?

Ответ 3

В большинстве ОС спящий режим (0) и его варианты могут использоваться для повышения эффективности в ситуации опроса, чтобы дать другим потокам возможность работать, пока планировщик потоков не решит пробудить поток опроса. Он бьет полный цикл. Я не нашел много пользы для ненулевого тайм-аута, хотя, и яблоко, в частности, сделало довольно хорошую работу по созданию архитектуры, управляемой событиями, которая в любом случае должна устранить необходимость опроса в большинстве ситуаций.

Ответ 4

- Пример Использование сна находится в следующем состоянии:

В сценарии сетевой симуляции мы обычно имеем события, которые выполняются событием по событию, используя планировщик. Планировщик выполняет события упорядоченным образом. Когда событие завершается, и планировщик переходит к следующему событию, планировщик сравнивает следующее время выполнения события с машинным часом. Если следующее событие запланировано на будущее, симулятор будет спать до тех пор, пока не будет достигнуто реальное время, а затем выполнит следующее событие.

-From linux Man страницы:

Функция usleep() приостанавливает выполнение вызывающего потока для (по меньшей мере) микросекунд usec. Сон может немного удлиняться при любой активности системы или времени, затрачиваемом на обработку вызова, или на детализацию системных таймеров. в то время как сон задерживает выполнение задачи (может быть нить или что-то еще) на некоторое время. Обратитесь к 1 и 2 для получения более подробной информации о функциях.