Java並發/多線程教程——3多線程的開銷
本係列譯自jakob jenkov的Java並發多線程教程,個人覺得很有收獲。由於個人水平有限,不對之處還望矯正!
應用程序由單線程到多線程,不僅僅給我帶來了便利,同時也也帶來了一些開銷。不要因為你會多線程,就把所有的程序都設計成多線程。如果把單線程改成多線程,你獲得到的好處要遠遠超過開銷,對於這一點你應該有個清醒的認識。當你猶豫是應該用多線程還是單線程時,你要衡量性能和響應時間,而不是靠猜測。
更複雜的設計
盡管多線程應用程序的某些部分比單線程應用程序更簡單,但其他部分會更複雜,訪問共享數據的執行代碼需要特別注意,線程間的交互並不簡單,錯誤的線程同步產生的問題很不容易檢測、重現和修複。
上下文切換的開銷
當CPU從一個線程的執行切換到另一個線程,CPU 需要保存當前線程的本地數據,程序指針等。這種切換稱之為"上下文切換",CPU從一個線程的上下文,切換到另一個線程的上下文,上下文的切換並不容易,除非必要,不要進行頻繁的上下文切換。
增加資源消耗
一個線程的運行需要計算機的資源,除了CPU 的運行時間,還需要一些內存來存他的本地堆棧,它可能也會占用操作係統的資源去管理這個線程,例如,可創建一個程序,開啟100個線程除了等待,其他什麼都不做,看看當這個程序運行時內存的占用情況。
最後更新:2017-06-25 22:35:34