【发布时间】:2010-12-27 14:37:41
【问题描述】:
好的,我知道 System.Timer 的一个对象在线程池中执行,而不是在 UI 线程中执行。我也知道 System.Timer 是线程安全的。
假设我有一个 System.Timer 对象的集合。我可以让它们全部运行并且(除非我弄错了)它们实际上会在线程池中执行。
假设我创建了一个线程集合,每个线程运行一个 System.Timer 对象来定期执行它们的操作。 这些“包含线程”的计时器是否仍会在系统的线程池中执行?还是它们的执行会发生在线程本身内部?
换句话说:我是否通过在多个线程中运行计时器来欺骗自己,因为它们的执行将发生在同一个线程池中并因此以相同的优先级执行? 或者通过让计时器在单独的线程中执行(尽管有异常处理和其他线程风险)有实际好处(速度或其他方面)?
第三种选择是拥有一组计时器,并让它们的 Elapsed 事件为进程启动一个线程。 这个会是首选吗?
另外,可以改变线程池的优先级吗?还是最好在单独的线程中运行进程,然后配置那个线程的优先级。
谢谢!
【问题讨论】:
-
我会使用单个 ThreadPool 来代替计时器集合。
标签: .net multithreading timer threadpool