【问题标题】:How is the thread-pool handled when using System.Timer objects in multiple threads?在多个线程中使用 System.Timer 对象时如何处理线程池?
【发布时间】:2010-12-27 14:37:41
【问题描述】:

好的,我知道 System.Timer 的一个对象在线程池中执行,而不是在 UI 线程中执行。我也知道 System.Timer 是线程安全的。

假设我有一个 System.Timer 对象的集合。我可以让它们全部运行并且(除非我弄错了)它们实际上会在线程池中执行。

假设我创建了一个线程集合,每个线程运行一个 System.Timer 对象来定期执行它们的操作。 这些“包含线程”的计时器是否仍会在系统的线程池中执行?还是它们的执行会发生在线程本身内部?

换句话说:我是否通过在多个线程中运行计时器来欺骗自己,因为它们的执行将发生在同一个线程池中并因此以相同的优先级执行? 或者通过让计时器在单独的线程中执行(尽管有异常处理和其他线程风险)有实际好处(速度或其他方面)?

第三种选择是拥有一组计时器,并让它们的 Elapsed 事件为进程启动一个线程。 这个会是首选吗?

另外,可以改变线程池的优先级吗?还是最好在单独的线程中运行进程,然后配置那个线程的优先级。

谢谢!

【问题讨论】:

  • 我会使用单个 ThreadPool 来代替计时器集合。

标签: .net multithreading timer threadpool


【解决方案1】:

就我个人而言,我会选择第三种选择——拥有一组在线程池中运行的计时器,并在 Tick/Elapsed 事件上启动单个线程——因为这样管理你的线程操作要简单得多。

可以根据计时器的值启动、暂停或停止线程,并且您的计时器都由公共线程池管理 - 因此它们都有机会增加。

【讨论】:

    猜你喜欢
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多