LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

Как такие вещи оптимизируются ОС/рантаймом/компилятором?

ничто такое компилятором не оптимизируется.

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

за yield надо отрывать голову, это примитив чисто для програмирования самых недр кернела, для имплементации обьектов типа мьютексы, семафоры и проч.

единственно где активно применяется yield, и там без него просто нельзя - это кооперативная многозадачность, когда треды переключаются по воле программера, таким вот yield(), ручками, но такая многозадачность редко применяется, на слабых совсем системах, поскольку просто реализуема. но писать софт на этом неудобно, хотя и можно.

правильно - почитать что такое event-driven програмимрование(архитектура) и работать по событиям, впадая в ожидание. тогда тред снимается с планировщика и время/ресурсы проца не кушает. для этого применяются всякие очереди с ожиданием, семафоры, poll/select, conditional variables и их аналоги.

sleep(…) - это тоже ожидание и снятие треда с шедулера, но в данном случае тред ждет ивента от внутреннего системного таймера, что нехорошо. применять стоит только в особых случаях, обычно наличие sleep(..) говорит о пороке архитектуры. ну или какой-то очень специфической функциональности.

Исходная версия alysnix, :

Как такие вещи оптимизируются ОС/рантаймом/компилятором?

ничто такое компилятором не оптимизируется.

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

за yield надо отрывать голову, это примитив чисто для програмирования самых недр кернела, для имплементации обьектов типа мьютексы, семафоры и проч.

правильно - почитать что такое event-driven програмимрование(архитектура) и работать по событиям, впадая в ожидание. тогда тред снимается с планировщика и время/ресурсы проца не кушает. для этого применяются всякие очереди с ожиданием, семафоры, poll/select, conditional variables и их аналоги.

sleep(…) - это тоже ожидание и снятие треда с шедулера, но в данном случае тред ждет ивента от внутреннего системного таймера, что нехорошо. применять стоит только в особых случаях, обычно наличие sleep(..) говорит о пороке архитектуры. ну или какой-то очень специфической функциональности.