你在做什麼工作項目?
如果您有任何形式的跨線程同步(臨界區等)那麼這可能會導致你花時間拖延線程等待資源成爲自由。
例如,如果你正在做任何形式的文件訪問,那麼你要花費相當大的阻塞時間等待加載完成,這將使你的線程閒置了大量的時間。你可以在這個問題上拋出更多線程,但是最終會產生更多的磁盤請求,而資源爭用將成爲更大的問題。
那是一對夫婦的潛在想法,但我真的需要知道你在做什麼之前,我可以更加有用...
編輯:在回答你的意見......
1 )好吧
2)由於切換開銷,你會執行2000個線程工作。實際上,在8核心機器上運行20-25個線程也可能是一個糟糕的計劃,因爲如果讓它們以高速運行,那麼它們會花時間竊取對方的運行時間,並且常規上下文切換(軟件線程切換)非常昂貴。它們可能不像等待你的代碼所遭受的那樣昂貴。
3)記錄?你是否只是將它們提交給一個異步隊列,當它有機會或者它們是同步文件寫入時將它們分發給磁盤?如果它們是異步的,那麼你可以保證在你不得不等待之前沒有可以排隊的最大請求數量?如果你不得不等待多少線程結束爭奪剛剛開放的空間?單獨有很多ifs。
4)如果2個線程同時對數據庫進行類似的調用,即使在最佳數據庫上的數據庫操作也可能會阻塞。一個好的數據庫旨在限制這一點,但很可能至少有一些衝突會發生。
只要說你想得到一個好的線程分析器,看看時間真的在哪裏丟失。否則你只能忍受性能或以不同的方式攻擊問題...
來源
2010-09-28 09:13:12
Goz
1.當活動接收到消息時,它調用CloseActivity方法。 2.我有一個監視可用線程數的工具。在我的計算機上,池中有2000個線程,處理期間不超過20-25個正在使用。 3.除記錄以外,我不對文件系統執行任何操作。但是,我使用企業庫中的日誌應用程序塊,所以我認爲這不是問題。 4.正如我所說的,工作流很複雜,它包含許多數據庫操作。我準備了一些測試,其中一些活動被禁用。在這種情況下,工作流程處理得更快。 – 2010-09-28 11:11:56
至於我使用.NET運行時管理的線程池的一些線程。該池根據機器配置決定應該創建多少個線程。例如在我的同事電腦上,這個池包含「僅」500個線程。你怎麼想?假設線程的默認數量可能過高或過低,確定池中的線程數量的最佳方法是什麼? – 2010-09-30 10:55:12
好得多取決於池的管理方式。如果它在線程很難觸及CPU時沒有分配多個線程,那麼這不是問題。唉,我真的不知道有足夠的瞭解它的線程池系統能夠量化上一個答案,恐怕:( – Goz 2010-09-30 13:35:56