多線程的開銷

從單線程應(yīng)用到多線程應(yīng)用帶來的不僅僅是好處。也會(huì)帶來開銷。不要僅僅在一個(gè)應(yīng)用中使用多線程僅僅是因?yàn)槟隳軌?會(huì))使用多線程。你應(yīng)該能確定使用多線程帶來的好處要遠(yuǎn)遠(yuǎn)多于它帶來的花銷。如果不能夠確定,那么請嘗試測量應(yīng)用的性能和響應(yīng)性,不僅僅是猜測。

更復(fù)雜的設(shè)計(jì)

盡管多線程應(yīng)用的某些部分要比單線程應(yīng)用更加簡單,但是應(yīng)用的另一些部分會(huì)變得更加復(fù)雜。當(dāng)一個(gè)多線程應(yīng)用訪問共享數(shù)據(jù)時(shí)要特別注意。線程的交互一點(diǎn)也不簡單。錯(cuò)誤總是在不正確的線程同步中產(chǎn)生,而且很難發(fā)現(xiàn)、重現(xiàn)、修復(fù)。

線程切換開銷

當(dāng)一個(gè)cpu從一個(gè)線程切換到另一個(gè)線程時(shí),cpu需要保存當(dāng)前線程的本地?cái)?shù)據(jù),程序當(dāng)前的指針等,然后加載下一個(gè)等待執(zhí)行的線程的本地?cái)?shù)據(jù),程序指針等。這種切換被稱之為上下文切換。cpu從執(zhí)行一個(gè)線程切換去執(zhí)行另一個(gè)線程。

上下文切換需要花費(fèi)很多資源。除非必要,你不要去切換上下文。

你能夠讀更多的信息關(guān)于上下文在維基百科上面。

增加的資源消耗

為了啟動(dòng)一個(gè)線程需要消耗一些計(jì)算機(jī)的資源。而且一個(gè)線程cpu時(shí)間(?)需要一些內(nèi)存來存儲(chǔ)它的本地的棧。它也會(huì)在操作系統(tǒng)中占據(jù)一些資源來管理線程。嘗試創(chuàng)建一個(gè)擁有100個(gè)線程的程序,每一個(gè)線程什么都不做,僅僅是等待,然后看看當(dāng)這個(gè)應(yīng)用運(yùn)行的時(shí)候占據(jù)了多少內(nèi)存。

ps:本人只是一個(gè)自學(xué)英語一段時(shí)間的初級(jí)程序猿。無論是英語翻譯程度,還是技術(shù)理解程度都遠(yuǎn)遠(yuǎn)不足,如果文中有翻譯不到位,或者技術(shù)理解錯(cuò)誤情況,還請各位指出,必定改正,也可相互學(xué)習(xí)交流。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本系列譯自jakob jenkov的Java并發(fā)多線程教程,個(gè)人覺得很有收獲。由于個(gè)人水平有限,不對(duì)之處...
    Steven_cao閱讀 773評(píng)論 4 3
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,753評(píng)論 11 349
  • 前言 個(gè)人認(rèn)為,學(xué)習(xí),內(nèi)容越多、越雜的知識(shí),越需要進(jìn)行深刻的總結(jié),這樣才能記憶深刻,將知識(shí)變成自己的。這篇文章主要...
    堯淳閱讀 731評(píng)論 0 17
  • 柔軟的云團(tuán)在天空中自由生長 盛開的云蓮把根蒂結(jié)在山巒 山風(fēng)讓山石榴清亮的葉片搖曳幾回 云海就開辟出了蔚藍(lán)的湖泊 陽...
    自然律閱讀 251評(píng)論 5 4
  • 戀愛,愛情,真的可謂是甜蜜的毒藥。為什么這么說?有人在愛情中,得到了快樂和幸福,雖然會(huì)參雜著難過,但真正的愛情不都...
    小魚加面閱讀 411評(píng)論 1 4

友情鏈接更多精彩內(nèi)容