В раннем детстве, лет так 20 назад, я при помощи старого папиного ноута с Вин95 и QBasic пытался писать свои первые хэлловорлды. Там использовался брутально-прямолинейный способ сделать паузу в исполняемом потоке:
FOR I = 1 TO 100000
NEXT
Потом, когда я стал постарше, мне объяснили, что это напрасный перевод процессорного времени.
Теперь стало интересно, как дело обстоит в современных ОС. Если я напишу цикл, сидящий в отдельном треде, вроде
for (;;) {
if (some_condition) {
break;
} else {
continue;
}
{
насколько это будет расточительно с точки зрения ресурсов? Предположим, у нас есть куча дочерних процессов, которые нерегулярно, время от времени выдают что-то в stdout/stderr, это нужно ловить в родительском процессе, парсить и как-то на это реагировать. Насколько такой прямолинейный подход будет эффективным? Какие есть альтернативы? Насколько разумно будет вообще заморачиваться по этому поводу, если речь идёт не о тысячах соединений в секунду? Как такие вещи оптимизируются ОС/рантаймом/компилятором?