2010-09-28 18 views
3

你好 我很不尋常的問題,因爲我認爲在我的情況下工作流運行時沒有使用足夠的CPU能力。情景如下:如何強制工作流運行時使用更多CPU功率?

  1. 我發送了很多消息給隊列。我使用WorkflowRuntime類中的EnqueueItem方法。
  2. 我使用WorkflowRuntime類的CreateWorkflow方法創建工作流的新實例。
  3. 我等到新的工作流程將移至第一個狀態。在正常情況下,需要幾十秒(工作流程非常複雜)。當消息同時發送到隊列時(如第1點所述),需要1分鐘或更長時間。

我觀察低CPU(8個內核)的利用率,不超過15%以上。我可以補充說,我有單獨的流程負責工作流程邏輯,並與WCF通信。

回答

0

你在做什麼工作項目?

如果您有任何形式的跨線程同步(臨界區等)那麼這可能會導致你花時間拖延線程等待資源成爲自由。

例如,如果你正在做任何形式的文件訪問,那麼你要花費相當大的阻塞時間等待加載完成,這將使你的線程閒置了大量的時間。你可以在這個問題上拋出更多線程,但是最終會產生更多的磁盤請求,而資源爭用將成爲更大的問題。

那是一對夫婦的潛在想法,但我真的需要知道你在做什麼之前,我可以更加有用...

編輯:在回答你的意見......

1 )好吧
2)由於切換開銷,你會執行2000個線程工作。實際上,在8核心機器上運行20-25個線程也可能是一個糟糕的計劃,因爲如果讓它們以高速運行,那麼它們會花時間竊取對方的運行時間,並且常規上下文切換(軟件線程切換)非常昂貴。它們可能不像等待你的代碼所遭受的那樣昂貴。
3)記錄?你是否只是將它們提交給一個異步隊列,當它有機會或者它們是同步文件寫入時將它們分發給磁盤?如果它們是異步的,那麼你可以保證在你不得不等待之前沒有可以排隊的最大請求數量?如果你不得不等待多少線程結束爭奪剛剛開放的空間?單獨有很多ifs。
4)如果2個線程同時對數據庫進行類似的調用,即使在最佳數據庫上的數據庫操作也可能會阻塞。一個好的數據庫旨在限制這一點,但很可能至少有一些衝突會發生。

只要說你想得到一個好的線程分析器,看看時間真的在哪裏丟失。否則你只能忍受性能或以不同的方式攻擊問題...

+0

1.當活動接收到消息時,它調用CloseActivity方法。 2.我有一個監視可用線程數的工具。在我的計算機上,池中有2000個線程,處理期間不超過20-25個正在使用。 3.除記錄以外,我不對文件系統執行任何操作。但是,我使用企業庫中的日誌應用程序塊,所以我認爲這不是問題。 4.正如我所說的,工作流很複雜,它包含許多數據庫操作。我準備了一些測試,其中一些活動被禁用。在這種情況下,工作流程處理得更快。 – 2010-09-28 11:11:56

+0

至於我使用.NET運行時管理的線程池的一些線程。該池根據機器配置決定應該創建多少個線程。例如在我的同事電腦上,這個池包含「僅」500個線程。你怎麼想?假設線程的默認數量可能過高或過低,確定池中的線程數量的最佳方法是什麼? – 2010-09-30 10:55:12

+0

好得多取決於池的管理方式。如果它在線程很難觸及CPU時沒有分配多個線程,那麼這不是問題。唉,我真的不知道有足夠的瞭解它的線程池系統能夠量化上一個答案,恐怕:( – Goz 2010-09-30 13:35:56

2

你有日誌記錄,你認爲這不是問題,但你不知道。有很多數據庫操作。那些需要阻止I/O。擁有更多核心只有在不同線程可以暢通無阻地運行時纔有用。

我討厭聽起來像被卡住的記錄,總是小跑相同的答案,但是你的問題是什麼都在猜測,而你問其他人猜了。人們非常願意猜測,但猜測不起作用。你需要找出發生了什麼事。

要了解發生了什麼,我使用的方法是,把它一個調試器下運行。 (通過下降到一個核心簡化問題。)然後暫停整個事情,查看每個活動線程,並找出它正在等待的內容。如果由於某種原因正在等待某個CPU限制功能的完成,那麼請記下它。如果它正在等待某些日誌記錄完成,請記錄。如果它正在等待數據庫查詢完成,請記下它。如果它正在等待某個其他線程的互斥鎖,請記下它。

這樣做對每個線程,並做了好幾遍。那麼,你真的可以說你知道它在做什麼。當你知道它在等待什麼,爲什麼,你會有一個很好的想法如何改善它。這是this technique的變化。

0

WF3性能上慢側一點。如果你使用的是.NET 4,你將獲得更好的性能轉移到WF4。由於WF4是一款完全不同的產品,因此請注意您的重寫。

至於WF3。有白皮書here,應該給你足夠的信息來改善標準設置的東西。查找諸如增加DefaultWorkflowSchedulerService使用的線程數量或切換到ManualWorkflowSchedulerService並禁用默認啓用的性能計數器。

+0

我知道,WF4比WF3速度較快,但目前我不能切換到新的技術,因爲缺乏向後兼容性,沒有時間進行遷移。 我已經找到了這份白皮書,你說的對,它確實不錯。 – 2010-09-30 10:35:23

相關問題