yigal_s: (Default)
[personal profile] yigal_s
А может ли быть такое чудо, что на однопроцессорном линуксе бежит риал-тайм тред (с приоритетом SCHED_RR 57, например), еще один, второй, риал-тайм тред (с приоритетом SCHED_RR 40, например) тупо висит, вытесененный НАПРОЧЬ первым...

и одновременно (!!!) прекрасно работает shell в обычном приоритете SCHED_OTHER?

первый риал-тайм тред, впрочем, постоянно делает sched_yield(), но ведь этим делу не поможешь? Вот, скажем, хоть он и делает sched_yield(), но второй риал-тайм тред не бежит вообще, а shell работает и даже не кашляет.

Я в некотором недоумении.

Date: 2012-07-27 11:53 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Так это логично, потому что иначе может случиться, что второй тред потребуется прервать, когда он этого не хочет, т.е. обеспечить ему риал-тайм не удастся. А шелл можно прерывать в любом месте.

Date: 2012-07-28 12:20 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Я попытался объяснить, почему второму треду нельзя давать работать, а третьему - можно: потому что позволение работать третьему треду никак не помешает риал-тайм гарантиям для первого.

Date: 2012-07-28 12:53 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Первый точно ни на чем больше не простаивает, а только sched_yield() делает? Или в sched_yield() ошибка, и он один тик пропускает, а этого шеллу хватает.

Date: 2012-07-28 01:14 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Смотря какая ошибка. :)

Date: 2012-07-28 01:33 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Мало ли. Типа 57 > 40, поэтому второй заведомо не играет, а потом ошибочно отдаем в SCHED_OTHER.