簡體   English   中英

運行許多IO線程是否會影響一些CPU密集型線程的性能?

[英]Does running many IO threads impact performance of a few CPU-intensive threads?

假設我有一台具有12MB​​緩存的6核計算機。 我將其用於具有幾GB堆(大部分是2級Hibernate緩存)的服務器應用程序。

我注意到大多數時候,我有少數幾個線程在積極地服務於客戶端請求(正在燃燒CPU和與DB通訊),以及大約30-50個以上的線程僅與客戶端進行良好的同步網絡IO。

在學習Java內存模型時,我想知道這是否會影響性能。 許多網絡IO線程之一的上下文切換是否會破壞“活動”線程的線程/ CPU緩存? 此級別的並發本身是否有害(不考慮內存緩存)?

考慮到CPU緩存相對於整個應用程序內存有多小,這真的重要嗎? 如何確定邊界在哪里?

許多網絡IO線程之一的上下文切換是否會破壞“活動”線程的線程/ CPU緩存?

沒有硬性保證,但是我的直覺是,在實踐中,CPU緩存比數量級調度程序切換線程更頻繁地按數量級進行更新。 如果是這種情況,那么與已經進行的緩存更新相比,線程上下文切換所需的緩存更新的開銷非常小。

如何確定邊界在哪里?

通過試驗和測量(分析),與大多數與性能相關的問題一樣。 簡單的理論近似不會起作用,因為什么在現代PC 真的會在現實比任何合理的近似更復雜。

這將產生影響,並且當活動線程多於cpus時,您可能會有些抖動。 但是,抖動通常被認為相對較小,為10到100微秒。

您可以讓線程爭用緩存資源,但是除了減少每個線程使用的活動數據量之外,您無能為力。 這可以將您的cpu負載減少2倍或更多倍,但是會涉及很多工作,可能需要完全重寫(包括一些JDK和第三方庫),並且收效甚微。 例如,您需要多少CPU負載才能降低。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM