多執行緒效能與可伸縮性

2022-06-30 21:27:16 字數 1072 閱讀 3467

1 單執行緒程式不需要執行緒排程也不需要同步開銷,而且不需要使用鎖來保證資料結構的一致性。在多執行緒的排程和協調中都需要一定的效能開銷。對於為了效能而引入多執行緒的程式,並行帶來的效能提公升必須要超過併發導致的開銷。

2 上下文切換

如果可執行的執行緒數大於 cpu 的數量,那麼作業系統最終會將某個正在執行的執行緒排程出來,從而使其他執行緒能夠使用 cpu。這將導致一次上下文切換,在這個過程中將儲存當前執行執行緒的執行上下文,並將新排程進來的執行緒執行上下文設定為當前上下文。

切換上下文的開銷:執行緒排程過程中需要訪問由作業系統和jvm 共享的資料結構。應用程式、作業系統和jvm都是用一組相同的cpu。jvm 和 作業系統使用越多的cpu時鐘週期,應用程式可用的 cpu 週期就越少。而執行緒切換開銷不僅包含 jvm 和 作業系統開銷,當乙個執行緒切換進來後它所需要的資料可能不在當預處理器的本地快取,因此上下文切換將導致一些快取的缺失,因而執行緒在首次排程時會更加緩慢。

當執行緒由於等待某個發生競爭的鎖而被阻塞時,jvm 通常會將這個執行緒掛起,並允許他被交換出去。阻塞包括:阻塞io、等待獲取發生競爭的鎖、條件變數上的等待。

如國內和執行時間佔用率較高(超過10%),就表示排程活動發生的很頻繁,這很可能是 io 或競爭鎖導致的阻塞引起的。

3 記憶體同步

在評估同步操作帶來的效能影響時,區分競爭同步和無競爭同步非常重要。

例如方法的**片段

public

string getnames()

該方法至少會獲得釋放4次鎖。對於 list 的唯一引用就是區域性變數 stooges ,並且封閉在棧中的變數都會自動成為執行緒本地變數。一些智慧型的執行時編譯器會分析這些呼叫,將去掉這4次無競爭的鎖獲取操作。

某個執行緒同步可能會影響其他執行緒的效能,因為同步會增加共享記憶體匯流排上的通訊量,匯流排的頻寬是一定的,並且所有處理器都將共享這條匯流排。如果有多個執行緒競爭同步匯流排頻寬,那麼所有使用同步的執行緒都會受到影響。

4 在併發程式中,通常更多地將側重點放在吞吐量和可伸縮性上。

提公升程式的可伸縮性方法:

5 評價並行性的指標

吞吐量:指一組併發任務中已完成任務所佔的比例

響應性:指請求從發出到完成之間的時間

java併發程式設計實戰 效能與可伸縮性1

1,效能與可伸縮性 1.1,要想通過併發來獲得更好的效能,需要努力做好兩件事 更有效地利用現有處理資源,以及在出現新的處理資源時使程式盡可能地利用這些新的資源。1.2,應用程式效能可以採用多個指標來衡量 服務時間,延遲時間,吞吐率,效率,可伸縮性以及容量等 1.3,可伸縮性指的是 當增加計算資源時 ...

Linux 核心效能和可伸縮性

linux 作為 web 伺服器作業系統,展示了其高可靠性,最多可達4路的對稱多處理器 smp 它的smp可伸縮性 磁碟和網路i o效能,排程程式和虛擬記憶體管理器。硬體和軟體 ia 32體系結構 資料庫 查詢資料庫基準測試程式,而在硬體上,採用帶大磁碟配置的 8 路 smp 系統。資料庫軟體採用 ...

併發程式設計10 效能和可伸縮性

使用多執行緒也會引入一些效能的開銷,比如執行緒協調,上下文切換,執行緒建立和消亡。當使用過度的時候這些開銷可能超過對吞吐量響應和提高計算能力帶來的好處。可伸縮性就是可以通過增加計算資源 cpu,記憶體 來提供程式的吞吐量或者效能。程式的序列化 影響程式的效能,使用多執行緒來優化效能時,序列部分無法優...