Я использую System.Threading Timers для опроса датчиков на разных потоках (по одному задержка была медленной из-за латентности связи). Он также позволяет пользователю изменять скорость голосования, изменяя период таймера.Что происходит, когда таймерные потоки не заканчиваются вовремя
Что я не могу решить, что произойдет, если таймеры не закончатся до следующего периода. Я написал тестовую программу, но на самом деле ничего не ответил.
Если у меня есть функция, которая запускает ~ 1.7s и вызывает ее каждые 10 секунд, она заканчивается до следующего запуска, а использование моего процессора колеблется между 13% (один ядро 100%) и 0%.
t = new Timer(doWork, null, 0, 10000);
private void doWork(object o)
{
for(int i = 0; i < numberItts; i++)
{
}
}
Если я затем опустите период таймера на 1 сек, я бы ожидать, что она либо не выполнять поток, пока предыдущий не будет закончена, или сохранить порождая новые темы и использование процессора будет подниматься, как больше потоков начинают перед другими Конец. Фактически, использование ЦП колеблется от 13% до 25%.
Изменение периода до 500 мс, использование ЦП колеблется от 38% до 50%. Разумеется, в этот момент они должны начинаться гораздо быстрее, чем они заканчиваются.
Как справляются эти потоки? Что ограничивает количество, созданное, когда частота опроса быстрее, чем скорость, с которой потоки могут быть завершены?
«Я думаю, что поведение, которое вы ожидали, произойдет, когда вы уменьшите период таймера до значения <1.7s/8 = ~ 0.2125s» Это имеет большой смысл, спасибо. – MikeS159