2009-12-02 59 views
0

句柄與線程的關係如何?我正在編寫一個接受HTTP請求並在返回響應之前調用方法的服務。我編寫了一個測試客戶端,發送10,000個HTTP請求(使用信號量來確保一次只有1000個請求)。句柄如何與線程相關?

如果我通過ThreadPool或通過一個通用的Action <T> .BeginInvoke調用方法(在返回響應之前處理的方法),服務的句柄將繼續並停留在那裏直到所有請求完成,但是該服務的線程數幾乎死亡。

但是,如果我在返回響應之前同步調用該方法,則線程數會增加,但處理計數將會經過極端的峯值和谷值。

這是在Windows機器上C#(服務器2008)

回答

0

你可以把手柄爲指針的抽象。 Windows中有很多使用句柄的東西(當您在API級別打開文件時,您會獲得文件的句柄,當您創建窗口,窗口具有句柄,線程具有句柄等時)。所以,你的處理計數可能與你的線程上發生的操作有關。如果你有更多的線程在運行,更多的東西同時發生,所以你會看到更多的句柄打開。

1

您的描述過於模糊,無法提供良好的診斷。但是ThreadPool被設計爲仔細節制活動線程的數量。它將避免運行比CPU核心更多的線程。只有當線程「卡住」時,它纔會安排一個額外的線程。這就解釋了爲什麼你看到的線程數量並沒有大幅增加。並且,間接地,爲什麼處理計數保持穩定,因爲機器工作量較少。