2010-07-03 81 views
1

我已经设置了Quartz.NET来运行预定作业。当我查看线程ID时,这是惊人的。他们只是在10线程间隔重复。为什么Quartz.NET使用相同的线程ID创建线程?

我的意思是,比如,如果得到执行我的工作的第一线具有ID 101则第十一螺纹(即在最后间隔运行同一任务)具有相同的ID,101!

似乎Quartz.NET正在使用的10个线程池,但更令人惊讶的是:为什么线程具有相同的ID?他们不应该在每次创建时都得到新的线程ID吗?

回答

2

你还没回答自己的问题?我对石英知之甚少,但如果它使用线程池,那么,是的,它将重用线程。旋转起来线程的高成本是由一个线程池解决的问题之一,所以被重用现有的线程(即一个新的线程每一个工作请求被处理时不旋转加速)

+0

你说,线程不实际回收和他们在quartz.net重用?线程本地存储怎么样?每次都重置/清除?我们可以强迫它重置吗? – kaptan 2010-07-03 02:26:20

+0

啊。在我脑海里回收==重用,所以也许这会造成混淆。至于你的第二点:你提供了一个计划的方法。方法执行。完成后,当地人不在范围内。任务完成。线程进入睡眠状态,当更多工作到达时唤醒线程。 http://en.wikipedia.org/wiki/Thread_pool_pattern – spender 2010-07-03 02:28:40

3

这避免这个成本是因为Quartz.NET中的默认调度程序是DirectSchedulerFactory,它使用内部ThreadPool实现(SimpleThreadPool)。

,这将建立一个固定数量的线程和重复使用的作业一样线程。这可以防止您获取每个作业的新线程ID,因为线程!=作业。

相关问题