多線程與高并發(fā)課程 學(xué)習(xí)筆記

部分真題

計算機組成原理

進程和線程的本質(zhì)區(qū)別摔笤?

進程: 操作系統(tǒng)分配資源的基本單位
線程:CPU調(diào)度(操作系統(tǒng)執(zhí)行)的基本單位
線程切換:線程調(diào)度院喜,需要資源占用,所以線程不宜過多

jvm級別的線程

虛擬機的線程和操作系統(tǒng)線程的對應(yīng)關(guān)系皿桑?

  • hotspot jvm線程 和 內(nèi)核線程 一一對應(yīng)
  • synchronized(0)紧卒,需要等待線程執(zhí)行完畢,jdk1.2之前餐禁,由OS幫忙管理線程 -- 重量級鎖
  • 無鎖 - 偏向鎖 - 自旋鎖 - 重量級鎖(必須讓操作系統(tǒng)協(xié)助管理血久,即為重量級)

虛擬機管理線程方式

  • 虛擬出寄存器,虛擬的PC(記錄線程切換時執(zhí)行位置)
  • 管理屬于用戶控件的線程
  • 輕量級的線程 - 纖程(用戶級別線程帮非。go天然支持高并發(fā)氧吐,意指天然支持纖程/協(xié)程

go routine

go關(guān)鍵詞開啟一個go routine,對應(yīng)java的runnable末盔,每次go XXX相當(dāng)于起一個個任務(wù)筑舅,扔到一個個隊列中,讓系統(tǒng)線程去執(zhí)行庄岖,協(xié)程豁翎,線程比例 為 M:N


為什么用戶級別線程提高了效率角骤?

省去了操作系統(tǒng)管理線程的步驟隅忿,省去了線程的上下文切換心剥,把切換部分放到了jvm

  • CAS:compare and swap | compare and set
    操作后回寫時先查看是否依然為原本值,依然保持則回寫背桐;值已經(jīng)變動則重新取值操作后再回寫(自旋鎖优烧,樂觀鎖
  • 如何處理CAS的ABA問題:拿出值處理回寫時,發(fā)現(xiàn)值依然為零链峭,但無法確定這個值是否是被處理過但是又回到了原始值畦娄。如何處理?加版本弊仪!
  • 自旋鎖一定比重量級鎖效率高嗎熙卡?
    自旋鎖原地等待,會消耗資源励饵,在線程很多驳癌,cpu切換成本過高時則效率并不高
  • cas如何保證了原子性?
    LOCK IF MP(nulti processor)cpu原語支持了比較和修改的原子性役听,如果是多個cpu颓鲜,則加LOCK,原本是鎖總線典予,現(xiàn)在是鎖北橋信號

鎖升級初步

對象new出來放到內(nèi)存中甜滨,有四個部分:markwork8字節(jié),class pointer類型指針瘤袖,4字節(jié)衣摩,instance實例數(shù)據(jù),padding對齊捂敌,補到對象空間被八整除為止(為了提高效率昭娩。

鎖對象如何實現(xiàn)?

鎖對象如何實現(xiàn)黍匾?

加鎖后的對象栏渺,markword里面會不一樣,markword中裝入了鎖信息和GC和hashcode

偏向鎖锐涯?

  • 什么是偏向鎖磕诊?
    偏向鎖沒有經(jīng)過競爭機制,只是將線程id號標(biāo)記上了纹腌,是一種處理機制霎终。
  • 為什么有偏向鎖?
    實際使用中升薯,可能只有一個線程在用莱褒,為了方便實現(xiàn),節(jié)約時間涎劈,出現(xiàn)的偏向鎖
  • 偏向鎖出現(xiàn)競爭怎么辦广凸?
    當(dāng)有線程競爭時阅茶,先進行偏向鎖撤銷,轉(zhuǎn)化為自旋鎖谅海,占用者優(yōu)先持有脸哀,其他線程以cas方式競爭,依然是記錄線程id號的方式競爭鎖扭吁。
  • 使用偏向鎖是否一定提升效率撞蜂?(偏向鎖為什么需要延遲4秒鐘?)
    明確知道存在競爭時(比如jvm啟動時)侥袜,無需打開偏向鎖蝌诡,因為鎖轉(zhuǎn)為自選鎖也是需要占用資源的,確定空閑時(默認(rèn)4s)再打開偏向鎖
  • lock 和 synchronized區(qū)別枫吧?
    lock有公平鎖送漠,synchronized沒有公平鎖
  • 什么是公平鎖和非公平鎖?
    公平鎖(Fair):加鎖前檢查是否有排隊等待的線程由蘑,優(yōu)先排隊等待的線程闽寡,先來先得
    非公平鎖(Nonfair):加鎖時不考慮排隊等待問題,直接嘗試獲取鎖尼酿,獲取不到自動到隊尾等待
    公平鎖和非公平鎖

超線程

什么是超線程爷狈?

一個運算單元(ALU)對應(yīng)兩組寄存器(單核多線程),這時的兩個線程被同一個運算單元服務(wù)裳擎,此為超線程

CPU緩存和內(nèi)存

工業(yè)實踐涎永,3層最合適




緩存一致性問題

緩存行大小64字節(jié)
緩存一致性協(xié)議,保證緩存行的一致性
為了避免緩存行中不出現(xiàn)兩個變量鹿响,從而規(guī)避同步成本羡微,可以前后懟7個longInt (8字節(jié)),保證不與其他變量在一個緩存行


緩存一致性問題

intel cpu MESI協(xié)議

volatile

volatile 由淺入深

  • 線程可見性: MESI
  • 禁止重排序:cpu執(zhí)行的指令時間遠遠小于讀取內(nèi)存時間惶我,所以在等待結(jié)果之前妈倔,會將沒有關(guān)聯(lián)關(guān)系的后續(xù)指令拿來先執(zhí)行(CPU流水線優(yōu)化),這稱為CPU亂序執(zhí)行绸贡,禁止重排序盯蝴,則會禁止這種亂序執(zhí)行(禁止部分指令之間重排序,非全部指令)
    對于代碼影響就是听怕,有的賦值代碼的實際執(zhí)行順序捧挺,并不是嚴(yán)格按照代碼順序執(zhí)行的,影響的其實是匯編代碼尿瞭,但是高級語言中也可以復(fù)現(xiàn)

如何實現(xiàn)的禁止重排序闽烙?

引入一個概念,DCL:double check lock声搁,類似cas
示例代碼:

DCL

  • 上圖示例中黑竞,為什么必要加volatile捕发?


JSR內(nèi)存屏障


歡迎大家關(guān)注我的公眾號


半畝房頂
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市摊溶,隨后出現(xiàn)的幾起案子爬骤,更是在濱河造成了極大的恐慌充石,老刑警劉巖莫换,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異骤铃,居然都是意外死亡拉岁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門惰爬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喊暖,“玉大人,你說我怎么就攤上這事撕瞧×赀矗” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵丛版,是天一觀的道長巩掺。 經(jīng)常有香客問我,道長页畦,這世上最難降的妖魔是什么胖替? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮豫缨,結(jié)果婚禮上独令,老公的妹妹穿的比我還像新娘。我一直安慰自己好芭,他們只是感情好燃箭,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舍败,像睡著了一般遍膜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓤湘,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天瓢颅,我揣著相機與錄音,去河邊找鬼弛说。 笑死挽懦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的木人。 我是一名探鬼主播信柿,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冀偶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了渔嚷?” 一聲冷哼從身側(cè)響起进鸠,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎形病,沒想到半個月后客年,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡漠吻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年量瓜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片途乃。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡绍傲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耍共,到底是詐尸還是另有隱情烫饼,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布试读,位于F島的核電站杠纵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鹏往。R本人自食惡果不足惜淡诗,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伊履。 院中可真熱鬧韩容,春花似錦、人聲如沸唐瀑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哄辣。三九已至请梢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間力穗,已是汗流浹背毅弧。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留当窗,地道東北人够坐。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親元咙。 傳聞我的和親對象是個殘疾皇子梯影,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354