Этот код использует select
для тайм-аута.select
обычно принимает файловый дескриптор и заставляет вызывающую сторону ждать, пока на fd не произойдет событие ввода-вывода.Также требуется аргумент тайм-аута для максимального времени ожидания.Здесь fd равно 0, поэтому никаких событий не произойдет, и функция всегда будет возвращаться при достижении времени ожидания.
select(3)
, который вы получаете из библиотеки C, является оболочкой для системы select(2)
call, что означает, что вызов select(3)
в конечном итоге приведет вас в ядро.Затем ядро не планирует процесс, пока не произойдет событие ввода-вывода или не истечет время ожидания.Таким образом, процесс не использует процессор во время ожидания.
Очевидно, что скачок в ядре и планирование процессов приводят к задержкам.Поэтому, если у вас очень низкая задержка (наносекунды), вы должны использовать занятое ожидание.