почему занято ожидание избегает контекста переключения
Busy ждет не переключение контекста ИЗБЕЖАТЬ! контекстный переключатель - это процесс, в котором планировщик решает дать процессору другой процесс для запуска. Занятое ожидание - это метод, используемый для поддержания цикла цикла и ожидания чего-то. т. е. предотвращать одновременное изменение двух совместно используемых данных. Один процесс будет зацикливаться до тех пор, пока другой процесс не скажет ему, что он закончил. Это плохой метод синхронизации, так как загрузка процессора падает, поскольку процесс тратит свое время на вскрытие, ничего не делая.
И почему переключение контекста является менее дорогостоящим, чем тратить процессорное время
ЗАВИСИТ! Если код в критическом разделе короткий, ожидание может быть быстрее, чем контекстный переключатель. Процесс может игнорировать сигналы и таким образом работать на процессоре, пока он не отдает его добровольно. ПРИМЕЧАНИЕ не все сигналы могут быть проигнорированы.
Что изменится, если есть потоки вместо процессов?
Я боюсь, что это слишком доска для ответа, поскольку это может зависеть от ОС и если ОС знает о потоках.
У меня есть только одна проблема с вашим ответом, ожидание - это не плохой способ синхронизации, это зависит от варианта использования. Иногда, когда событие не занимает слишком много времени, лучше использовать ожидание ожидания вместо событий ядра, так как слишком много накладных расходов, введенных объектами ядра, и если вы знаете, что событие (или сигнализация) будет в очень короткое время занято ожидание на самом деле является лучшим подходом, переключение между пользовательским режимом и режимом ядра может быть чрезмерным, если время, затраченное на ожидание, меньше, чем это накладные расходы. –
@EduG действительно. И я упомянул об этом в своем ответе. Иногда ожидание может быть лучше, чем переключение контекста. –