Введение
Постоянная проверка условия в вычислительной технике.
In computer science and software engineering, busy waiting, busy looping or spinning is a technique in which a process repeatedly checks to see if a condition is true, such as whether keyboard input or a lock is available. Spinning can also be used to generate an arbitrary time delay, a technique that was necessary on systems that lacked a method of waiting a specific length of time. Processor speeds vary greatly from computer to computer, especially as some processors are designed to dynamically adjust speed based on current workload. Consequently, spinning as a time delay technique can produce unpredictable or even inconsistent results on different systems unless code is included to determine the time a processor takes to execute a "do nothing" loop, or the looping code explicitly checks a real time clock. In most cases spinning is considered an anti pattern and should be avoided, as processor time that could be used to execute a different task is instead wasted on useless activity. Spinning can be a valid strategy in certain circumstances, most notably in the implementation of spinlocks within operating systems designed to run on SMP systems.
В информатике и разработке программного обеспечения, занятое ожидание, занятый цикл или спиннинг — это техника, при которой процесс многократно проверяет, истинно ли некоторое условие, например, доступен ли ввод с клавиатуры или блокировка. Спиннинг также может использоваться для создания произвольной задержки времени, что было необходимо на системах, не имевших возможности ожидать заданный промежуток времени. Скорость процессоров значительно различается на разных компьютерах, особенно учитывая, что некоторые процессоры динамически регулируют скорость в зависимости от текущей нагрузки. Следовательно, использование спиннинга для создания задержки времени может приводить к непредсказуемым или даже противоречивым результатам на разных системах, если в коде не предусмотрено определение времени, необходимого процессору для выполнения "пустого" цикла, или если код цикла явно не проверяет системное время. В большинстве случаев спиннинг считается антипаттерном и его следует избегать, поскольку процессорное время, которое можно было бы использовать для выполнения другой задачи, тратится впустую на бесполезную деятельность. Однако спиннинг может быть оправданной стратегией в определенных ситуациях, в частности, при реализации спинлоков в операционных системах, предназначенных для работы на многопроцессорных системах.
In computer science and software engineering, busy waiting, busy looping or spinning is a technique in which a process repeatedly checks to see if a condition is true, such as whether keyboard input or a lock is available. Spinning can also be used to generate an arbitrary time delay, a technique that was necessary on systems that lacked a method of waiting a specific length of time. Processor speeds vary greatly from computer to computer, especially as some processors are designed to dynamically adjust speed based on current workload. Consequently, spinning as a time delay technique can produce unpredictable or even inconsistent results on different systems unless code is included to determine the time a processor takes to execute a "do nothing" loop, or the looping code explicitly checks a real time clock. In most cases spinning is considered an anti pattern and should be avoided, as processor time that could be used to execute a different task is instead wasted on useless activity. Spinning can be a valid strategy in certain circumstances, most notably in the implementation of spinlocks within operating systems designed to run on SMP systems.
Правильное использование
В программировании низкого уровня, активное ожидание (busy waiting) может быть даже предпочтительным. Реализация обработки, управляемой прерываниями, для каждого аппаратного устройства может быть нежелательной или непрактичной, особенно для устройств, к которым обращаются редко. Иногда необходимо записать управляющие данные в аппаратное обеспечение, а затем запросить статус устройства, являющийся результатом операции записи, который может стать корректным только после определенного количества тактов процессора после записи. Программист мог бы вызвать функцию задержки операционной системы, но это может занять больше времени, чем простое ожидание (spinning) в течение нескольких тактов, пока устройство не вернет свой статус.