Multithreading Costs

將單線程程序變成多線程程序并只有好處。也有一些代價(jià)。不要僅僅因?yàn)槟隳茏龅骄蛯?yīng)用程序多線程化。你需要確定這樣做的好處大于代價(jià)。如果有疑問(wèn),就測(cè)試程序的性能和響應(yīng)能力,不要靠猜。

More complex design

盡管多線程程序的某些部分比單線程程序簡(jiǎn)單,但其他部分則要復(fù)雜得多。由多線程執(zhí)行的訪問(wèn)共享數(shù)據(jù)的代碼需要格外小心。線程交互并不總是簡(jiǎn)單。由不正確的同步引起的錯(cuò)誤往往很難檢測(cè)、復(fù)現(xiàn)和修復(fù)。

Context Switching Overhead

當(dāng)線程從一個(gè)執(zhí)行線程切換到另一個(gè)時(shí),需要保存當(dāng)前線程的本地?cái)?shù)據(jù)、程序計(jì)數(shù)器等。然后加載另一個(gè)線程的本地?cái)?shù)據(jù)、程序計(jì)數(shù)器等。這個(gè)切換被稱(chēng)為“上下文切換”。CPU從執(zhí)行線程的上下文切換到另一個(gè)線程的上下文。

上下文切換并不便宜。你不會(huì)想在不必要的情況下進(jìn)行切換的。

關(guān)于上下文切換,你可以在維基百科上了解更詳細(xì)的內(nèi)容:http://en.wikipedia.org/wiki/Context_switch

Increased Resource Consumption

線程需要計(jì)算機(jī)中的一些資源才能運(yùn)行。除了CPU時(shí)間,它還需要一些內(nèi)存來(lái)存其本地棧。它還會(huì)消耗一些操作系統(tǒng)資源來(lái)管理它。你可以整個(gè)程序,創(chuàng)建100個(gè)線程,啥也不干,看看會(huì)占用多少內(nèi)存。

有必要說(shuō)明下,這個(gè)Java Concurrency系列來(lái)源于jenkov.com,本文只是翻譯,希望大家千萬(wàn)不要誤會(huì),本文不是原創(chuàng)。原文地址:Java Concurrency。

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

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

  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,818評(píng)論 11 349
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,674評(píng)論 1 32
  • 下面是我自己收集整理的Java線程相關(guān)的面試題,可以用它來(lái)好好準(zhǔn)備面試。 參考文檔:-《Java核心技術(shù) 卷一》-...
    阿呆變Geek閱讀 15,142評(píng)論 14 507
  • 1996年 素最終一個(gè)人留下來(lái)繼續(xù)念書(shū)。最好的兩個(gè)朋友,都離開(kāi)去了外地求學(xué)。 突然之間,日日相伴相知最好的兩個(gè)朋友...
    素衣七七閱讀 343評(píng)論 1 8
  • 輕松的感覺(jué)呢,往往都在緊張之后。 當(dāng)一件大事完成,或者一個(gè)有難度的目標(biāo)達(dá)成之后,會(huì)有種輕松的感覺(jué)。 今天差不多整天...
    Andy_d8c5閱讀 125評(píng)論 0 0

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