2013-05-22 109 views
0

請幫我理解這一點。每個核心有多少CPU時間?

我有一個STA VB6應用程序。它運行在與.net Web應用程序相同的虛擬服務器上。該服務器上有兩個核心。爲了測量.net應用程序的性能,我記錄了大約30%的CPU利用率。 VB6應用程序使用大約20%的CPU。它也鎖定了一段時間的核心,同時它將公寓呼叫轉移到數據庫。

如果VB6應用程序花費1分鐘的公寓電話外出,我是否可以認爲核心已完全鎖定一分鐘?換句話說,我可以假設每個核心爲VB6應用程序每小時提供一小時「cpu時間」嗎?所以,如果我有兩個核心,我是否也可以說這個設置每小時提供120分鐘的「cpu時間」?

謝謝!

回答

1

沒有人鎖定核心,永遠。您正在將線程與Cores混淆。

線程可能(但可能不會)在遠程調用期間阻塞一分鐘。但是Core並不僅僅只能運行一個線程,要麼現代Windows(Windows 95和更新版本)根本無法工作。 Windows需要能夠同時處理數百個進程,只需要一個核心。

在典型的會話中,內核會暫停幾十次,或每秒數百次部分或全部進程的線程,併爲每個內核分配其他內容。最終,你的主題會迴歸生活 - 也許在同一個核心上,也許在另一個核心上。

特別是進行遠程調用的線程通常處於「等待狀態」,這意味着內核將不會將線程的核心全部分配給,直到遠程調用完成。 (採取了一些近似,但是這是它的要點)

我可以假設每個核心提供的「CPU時間」一小時每小時的VB6應用程序?所以,如果我有兩個核心,我是否也可以說這個設置每小時提供120分鐘的「cpu時間」?

不可以。找出進程消耗多少CPU時間的唯一實用方法是查看其性能計數器。它肯定會比每小時CPU時間少1小時。因爲它甚至接近每小時CPU時間一小時,你將不得不最終獲得近100%的CPU利用率(對於VB6進程本身)。例如,在雙核系統上,每個內核可能會有48%的消耗,這些消耗都是由VB6進程消耗的,或者其他一些情況。

此外,對於像VB6使用的STA線程,添加核心將不會影響進程所花費的時間量(經過的時間,而不是CPU)的時間(禁止多線程的COM對象在STA外執行重要工作)跑步。

添加CPU內核幾乎不會增加進程的CPU時間消耗,因爲完成任務所需的通常CPU時間不會因爲您附近有額外的硅而發生變化。

但我認爲我們都錯過了一些東西。你究竟想知道什麼?我不知道你真正的問題是什麼,但我敢打賭,「cpu時間」不是答案。

0

您的問題被標記爲COM +,因此您需要考慮COM +如何管理組件的線程。

核心不應該被「鎖定」。因爲一個線程可以處理多個請求,所以COM +中的線程也不應該(根據你定義的鎖定方式)。這就是說,一個STA COM +組件長時間(60秒!)不在COM +中的公寓呼叫是性能問題的祕訣。

基本上,COM + STA線程池將多達5個活動綁定到每個STA線程。當您撥出公寓電話時,COM +允許其他請求作爲STA線程上的另一個活動提供服務。最多可能發生5次活動(每個線程)。同樣,一旦對另一項活動進行了控制,則在第二項活動完成之前,原始活動無法重新獲得控制權。在大負荷下和/或如果呼叫是「長時間運行」,則第一個活動完成的時間是完成所有其他活動(在線程上)的時間總和。這會殺死你的表現。

最好的文章是Avoid Long Running Method Calls from a Single-Threaded Apartment (STA)。我無法找到原始的Microsoft文章,因此我鏈接到此第三方存檔版本。