多執行緒的代價

2021-09-23 21:45:56 字數 647 閱讀 2929

從乙個單執行緒的應用到乙個多執行緒的應用並不僅僅帶來好處,它也會有一些代價。不要僅僅為了使用多執行緒而使用多執行緒。而應該明確在使用多執行緒時能多來的好處比所付出的代價大的時候,才使用多執行緒。如果存在疑問,應該嘗試測量一下應用程式的效能和響應能力,而不只是猜測。

雖然有一些多執行緒應用程式比單執行緒的應用程式要簡單,但其他的一般都更複雜。在多執行緒訪問共享資料的時候,這部分**需要特別的注意。執行緒之間的互動往往非常複雜。不正確的執行緒同步產生的錯誤非常難以被發現,並且重現以修復。

當cpu從執行乙個執行緒切換到執行另外乙個執行緒的時候,它需要先儲存當前執行緒的本地的資料,程式指標等,然後載入另乙個執行緒的本地資料,程式指標等,最後才開始執行。這種切換稱為「上下文切換」(「context switch」)。cpu會在乙個上下文中執行乙個執行緒,然後切換到另外乙個上下文中執行另外乙個執行緒。

上下文切換並不廉價。如果沒有必要,應該減少上下文切換的發生。

執行緒在執行的時候需要從計算機裡面得到一些資源。除了cpu,執行緒還需要一些記憶體來維持它本地的堆疊。它也需要占用作業系統中一些資源來管理執行緒。我們可以嘗試編寫乙個程式,讓它建立100個執行緒,這些執行緒什麼事情都不做,只是在等待,然後看看這個程式在執行的時候占用了多少記憶體。

03多執行緒的代價

從乙個單執行緒的應用到乙個多執行緒的應用並不僅僅帶來好處,它也會有一些代價。不要僅僅為了使用多執行緒而使用多執行緒。而應該明確在使用多執行緒時,能多獲取的好處比所付出的代價大的時候,才使用多執行緒。如果存在疑問,應該嘗試測量一下應用程式的效能和響應能力,而不只是猜測。雖然有一些多執行緒應用程式比單執...

Java 併發 教程 多執行緒的代價

從單執行緒到多執行緒應用程式不僅僅提供好處,它也有一些代價。只是因為你可以,就把乙個應用程式變成多執行緒。你應該明了,這樣做所獲得的好處要大於成本。如果有疑問,請嘗試著量化一下應用程式的效能或響應速度,而不是只是猜測。更複雜的設計 儘管多執行緒應用程式的某些部分比單執行緒應用程式更簡單,但其他部分更...

3 Java併發性和多執行緒 多執行緒的代價

以下內容 從乙個單執行緒的應用到乙個多執行緒的應用並不僅僅帶來好處,它也會有一些代價。不要僅僅為了使用多執行緒而使用多執行緒。而應該明確在使用多執行緒時能多來的好處比所付出的代價大的時候,才使用多執行緒。如果存在疑問,應該嘗試測量一下應用程式的效能和響應能力,而不只是猜測。設計更複雜 雖然有一些多執...