我已经设置 Quartz.NET 来运行预定的作业。当我查看线程 ID 时,这真是太神奇了。它们只是在 10 线程间隔内重复。
我的意思是,例如,如果第一个执行我的作业的线程的 ID 为 101,那么第十一个线程(在第十一个间隔运行相同的作业)具有相同的 ID,101!
看起来 Quartz.NET 使用的是 10 个线程的池,但更神奇的是:为什么线程的 ID 相同?他们不应该在每次创建时都获得新的线程 ID 吗?
我已经设置 Quartz.NET 来运行预定的作业。当我查看线程 ID 时,这真是太神奇了。它们只是在 10 线程间隔内重复。
我的意思是,例如,如果第一个执行我的作业的线程的 ID 为 101,那么第十一个线程(在第十一个间隔运行相同的作业)具有相同的 ID,101!
看起来 Quartz.NET 使用的是 10 个线程的池,但更神奇的是:为什么线程的 ID 相同?他们不应该在每次创建时都获得新的线程 ID 吗?
这是因为 Quartz.NET 中的默认调度程序是DirectSchedulerFactory,它使用内部线程池实现(SimpleThreadPool)。
这将设置固定数量的线程,并为作业重用相同的线程。这可以防止您为每个作业获取新的线程 ID,因为线程!=作业。
你没有回答你自己的问题吗?我对石英知之甚少,但如果它使用线程池,那么,是的,它将重用线程。启动线程的高成本是线程池解决的问题之一,因此通过重用现有线程来避免这种成本(即每次处理工作请求时都不会启动新线程)