2010-07-03 80 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,因爲線程!=作業。

相關問題