Java併發編程(Java Concurrency)(3)- 多線程的代價

原文鏈接:http://tutorials.jenkov.com/java-concurrency/costs.html

  摘要:這是翻譯自一個大概30個小節的關於Java併發編程的入門級教程,原作者Jakob Jenkov,譯者Zhenning Lang,轉載請註明出處,thanks and have a good time here~~~(希望自己不要留坑)

第三節 多線程的代價

與單線程相比,多線程不僅僅帶來了好處,也有其代價。不要因爲你能並行化一個應用你就這樣做,除非你充分的明白這樣做帶來的好處要多於其付出的代價。當你存在疑問時,試着衡量程序的性能和響應性,而不是靠着猜測。

更加複雜的程序設計

儘管多線程程序設計中的一部分內容比單線程要容易,但其他部分會更加複雜。程序員需要格外關注處理共享數據的多線程代碼。線程間的交互也和“容易”一點關係都沒有。不正確的線程同步帶來的錯誤將很難被檢測、復現和修復。

經常性的背景切換

當CPU從執行一個線程切換到另一個線程,CPU需要保存當前線程的數據、程序指針等內容,然後讀取代切換線程的數據和程序指針等內容。這個過程被稱爲“背景切換/上下文切換”(context switch)。換言之,CPU從一個線程的運行環境切換到另一個線程的運行環境。

背景切換並非免費的午餐,你絕對不需要做額外的背景切換。

關於背景切換的更多內容可以纔看維基百科的相關詞條:
http://en.wikipedia.org/wiki/Context_switch

資源消耗的增加

爲了運行一個線程需要獲取計算機的資源。除了CPU,線程還需要內存來存儲其堆棧。線程爲了維護線程還會花費額外的資源。如果感興趣可以嘗試寫一個程序,這個程序創建100個線程,每個線程什麼都不做,只是等在那裏,可以看看這個程序運行時究竟需要多少內存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章