Как обрабатывается пул потоков при использовании объектов System.Timer в нескольких потоках? - PullRequest
0 голосов
/ 17 декабря 2009

Хорошо, я знаю объект System.Timer, выполняемый в пуле потоков, а не в потоке пользовательского интерфейса. Я также знаю, что System.Timer является потокобезопасным.

Скажем, у меня есть коллекция объектов System.Timer. Я могу запустить все из них, и (если я не ошибаюсь) они действительно будут выполняться в пуле потоков.

Скажем, вместо этого я создаю коллекцию потоков, каждый из которых выполняет объект System.Timer для периодического выполнения своих действий. Будет ли выполнение этих «поточных» таймеров происходить в системном пуле потоков? Или их выполнение будет происходить внутри самой нити?

Другими словами: я обманываю себя, запуская таймеры внутри нескольких потоков, поскольку их выполнение будет происходить в одном и том же пуле потоков и, следовательно, будет выполняться с тем же приоритетом? Или есть ли реальное преимущество (скорость или иное), если таймеры выполняются внутри отдельных потоков (независимо от обработки исключений и других опасностей потоков)?

Третий вариант - иметь коллекцию таймеров, и их событие Elapsed запускает поток для процесса. этот будет предпочтительным вариантом?

Кроме того, можно ли изменить приоритет пула потоков? Или лучше запустить процесс в отдельном потоке, а затем настроить приоритет для этого потока .

Спасибо!

1 Ответ

1 голос
/ 17 декабря 2009

Лично я бы выбрал третий вариант - иметь набор таймеров, которые запускаются в пуле потоков, и запускать отдельные потоки в событии Tick / Elapsed, - так намного проще управлять вашими потоками.

Поток можно запускать, приостанавливать или останавливать в зависимости от значения ваших таймеров, и все ваши таймеры управляются общим пулом потоков - таким образом, все они получают шанс на приращение.

...