色偷偷精品伊人,欧洲久久精品,欧美综合婷婷骚逼,国产AV主播,国产最新探花在线,九色在线视频一区,伊人大交九 欧美,1769亚洲,黄色成人av

240 發(fā)簡(jiǎn)信
IP屬地:山西
  • 補(bǔ)充一下同步鎖中幾種鎖的升級(jí)過(guò)程:

    在對(duì)資源(對(duì)象)進(jìn)行上鎖時(shí),涉及到對(duì)象頭信息的修改,這里簡(jiǎn)單介紹一下對(duì)象頭中關(guān)于鎖的部分——當(dāng)前上鎖的線程id,無(wú)鎖狀態(tài)、偏向鎖標(biāo)記,輕量鎖標(biāo)記,重量鎖標(biāo)記。

    當(dāng)一個(gè)線程對(duì)資源進(jìn)行上鎖時(shí),對(duì)象處于無(wú)鎖狀態(tài),這時(shí)通過(guò)cas修改對(duì)象頭,并將當(dāng)前線程id放入對(duì)象頭,這就是偏向鎖,如果一直沒(méi)有線程對(duì)這個(gè)資源競(jìng)爭(zhēng),那么這個(gè)偏向鎖會(huì)一直保持,不會(huì)主動(dòng)釋放,隨后當(dāng)有線程與當(dāng)前線程進(jìn)行資源搶占時(shí),首先查看當(dāng)前線程是否還存活并且持有鎖,如果持有,則撤銷偏向鎖,升級(jí)為輕量級(jí)鎖,如果沒(méi)有,則將對(duì)象頭先調(diào)整為無(wú)鎖狀態(tài),再加偏向鎖。在輕量級(jí)鎖的情況下,有線程還是在與當(dāng)前持有鎖的線程進(jìn)行搶占資源并且不斷自旋,當(dāng)自旋達(dá)到一定次數(shù)的時(shí)候,輕量級(jí)鎖便會(huì)升級(jí)成重量鎖,并且將所有搶占該資源且沒(méi)有獲得鎖的線程全部放入等待隊(duì)列。

    高并發(fā)多線程總結(jié)

    1.多線程基本概念 首先,我們要理解多線程編程,必須清楚幾個(gè)基本概念:進(jìn)程——進(jìn)程是操作系統(tǒng)層面的概念,它是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位線程——線程是進(jìn)程內(nèi)部的程序流...

  • 修正一下:zset使用的是跳表和壓縮列表

    redis總結(jié)

    1.redis基礎(chǔ) 今天我們來(lái)聊聊Redis緩存!說(shuō)起redis,首先想到的肯定是速度極快,因?yàn)閞edis是基于內(nèi)存的數(shù)據(jù)庫(kù)嘛!那么,redis除了速度快,還存在其他優(yōu)勢(shì)嗎?...

  • 補(bǔ)充一下redis的底層數(shù)據(jù)結(jié)構(gòu)知識(shí):
    大家在應(yīng)用redis的時(shí)候會(huì)發(fā)現(xiàn)這么幾種數(shù)據(jù)結(jié)構(gòu)——String、Hash、set、zset,list以及位圖bitmap等,剛剛說(shuō)的這些都屬于咱們應(yīng)用層面的結(jié)構(gòu),我們今天的重點(diǎn)就應(yīng)用層面走向底層原理,來(lái)深入剖析一下redis的幾種底層數(shù)據(jù)結(jié)構(gòu)。
    String——SDS(簡(jiǎn)單動(dòng)態(tài)字符串)
    從結(jié)構(gòu)說(shuō)起,在老版本(3.x)的結(jié)構(gòu)中包含len(字符串長(zhǎng)度)、free(剩余可用長(zhǎng)度)、buf[]數(shù)組(所存儲(chǔ)的字符串),新版本(6.x)之后的版本做了一系列改變,結(jié)構(gòu)包含len(已用長(zhǎng)度,細(xì)分為多種長(zhǎng)度結(jié)構(gòu))、alloc(總長(zhǎng)度)、flags(一個(gè)char類型變量,低三位存儲(chǔ)類型,高五位預(yù)留)、buf[]數(shù)組;
    第二種結(jié)構(gòu)是在第一個(gè)的基礎(chǔ)上進(jìn)行優(yōu)化的,所以我們就直接從第二種結(jié)構(gòu)入手吧
    為什么選用SDS而不是C語(yǔ)言的字符串?
    1.二進(jìn)制安全2.支持動(dòng)態(tài)擴(kuò)容3.惰性空間釋放,減少內(nèi)存重新分配次數(shù)4.獲取字符串長(zhǎng)度為O(1)
    >1二進(jìn)制安全是因?yàn)樵贑語(yǔ)言中字符串是以“/0”結(jié)尾的,而在SDS中結(jié)尾可以直接通過(guò)長(zhǎng)度len來(lái)判斷,并不需要“/0”,所以SDS字符串中可以存在多個(gè)“/0”,并且可以支持存儲(chǔ)二進(jìn)制數(shù)據(jù)
    >2動(dòng)態(tài)擴(kuò)容是因?yàn)镾DS的len中存在多種長(zhǎng)度數(shù)據(jù),在進(jìn)行擴(kuò)容時(shí),首先判斷可用空間alloc是否夠用,如果夠用則不新開辟空間,如果不夠的話,判斷新開辟空間是否大于1MB,如果不大于則將原空間進(jìn)行兩倍擴(kuò)容,如果大于1MB,則擴(kuò)容1MB。這里存在空間預(yù)留機(jī)制,即可用空間大小alloc,避免多次開辟內(nèi)存;
    >3 惰性空間釋放,當(dāng)數(shù)據(jù)進(jìn)行壓縮后,SDS并不會(huì)直接修改空間大小,而是留待下一次使用,從而減少內(nèi)存分配
    >獲取字符串O(1) 不用像C語(yǔ)言一樣去遍歷字符串計(jì)數(shù),直接通過(guò)len屬性獲取字符串長(zhǎng)度
    list——雙向鏈表和ziplist
    雙向鏈表我們還是比較常見的(redis在傳統(tǒng)雙向鏈表上加了頭尾指針和自定義的相關(guān)函數(shù)),這里我們直接講壓縮列表吧(數(shù)據(jù)節(jié)點(diǎn)較少的情況下使用,原因與entry中的prevlen有關(guān));
    結(jié)構(gòu)體包含:zlbytes、zllen、zltail、entry、zlend
    zlbatys:記錄整個(gè)壓縮列表占用內(nèi)存字節(jié)數(shù)
    zllen:記錄壓縮列表節(jié)點(diǎn)個(gè)數(shù)
    zltail:記錄壓縮列表尾部節(jié)點(diǎn)與頭部起始地址多少字節(jié),方便直接訪問(wèn)尾部節(jié)點(diǎn)
    zlend:標(biāo)記壓縮列表的結(jié)束點(diǎn),一般是255
    entry:三部分組成——prevlen前一個(gè)節(jié)點(diǎn)所占字節(jié)數(shù)、encoding記錄當(dāng)前節(jié)點(diǎn)實(shí)際數(shù)據(jù)類型以及長(zhǎng)度,data記錄當(dāng)前節(jié)點(diǎn)的實(shí)際數(shù)據(jù)
    (連續(xù)更新):prevlen一般由一個(gè)字節(jié)或者五個(gè)字節(jié)構(gòu)成,當(dāng)前一個(gè)節(jié)點(diǎn)處于254節(jié)點(diǎn)的臨界值附近時(shí),此時(shí)插入一個(gè)新節(jié)點(diǎn)若超過(guò)254字節(jié),那么就會(huì)使得后面節(jié)點(diǎn)中的prevlen全部需要更新,引起連鎖反應(yīng),這是就需要內(nèi)存重新分配空間,復(fù)制原先的數(shù)據(jù);所以壓縮列表一般是在數(shù)據(jù)節(jié)點(diǎn)較少的情況下使用
    skiplist-跳表:可以與樹狀數(shù)組進(jìn)行類比,跳表就是一個(gè)改裝的樹狀鏈表,相當(dāng)于一個(gè)新的索引結(jié)構(gòu),查詢時(shí)間復(fù)雜度為lgN;跳表的實(shí)現(xiàn)主要包含兩個(gè)結(jié)構(gòu)——zskiplistNode,zskiplist兩部分
    zskiplistNode:數(shù)據(jù)ele、分?jǐn)?shù)score、后退指針backward、層zskiplistLevel{前進(jìn)指針forword 跨度span}
    zskiplist:表頭指針hard與tail、節(jié)點(diǎn)數(shù)量length,節(jié)點(diǎn)中最大層數(shù)level
    簡(jiǎn)述過(guò)程:
    插入zskipNode時(shí)會(huì)隨機(jī)一個(gè)層數(shù)level(范圍在32以內(nèi)),從最上層開始向下遍歷尋找合適的位置,修改前后node節(jié)點(diǎn)指針,插入完成
    刪除目標(biāo)節(jié)點(diǎn),和插入相同,從上往下遍歷層數(shù),直到找到目標(biāo)節(jié)點(diǎn),修改目標(biāo)節(jié)點(diǎn)指針以及跨度span
    更新目標(biāo)節(jié)點(diǎn):先做刪除操作,再做插入操作

    總結(jié)一下:字符串String使用SDS,list可以使用ziplist和雙端隊(duì)列、set使用哈希表和有序數(shù)組,zset使用跳表和哈希表,hashmap使用哈希表和壓縮列表,由此可見ziplist使用非常頻繁,這也是充分利用CPU緩存的最佳實(shí)現(xiàn),因?yàn)閦iplist是一片連續(xù)的內(nèi)存空間;這也是redis快的原因之一;

    redis總結(jié)

    1.redis基礎(chǔ) 今天我們來(lái)聊聊Redis緩存!說(shuō)起redis,首先想到的肯定是速度極快,因?yàn)閞edis是基于內(nèi)存的數(shù)據(jù)庫(kù)嘛!那么,redis除了速度快,還存在其他優(yōu)勢(shì)嗎?...

  • 120
    redis總結(jié)

    1.redis基礎(chǔ) 今天我們來(lái)聊聊Redis緩存!說(shuō)起redis,首先想到的肯定是速度極快,因?yàn)閞edis是基于內(nèi)存的數(shù)據(jù)庫(kù)嘛!那么,redis除了速度快,還存在其他優(yōu)勢(shì)嗎?...

  • 120
    Spring總結(jié)

    1.Spring核心 今天給大家講講Spring吧,談到Spring,學(xué)過(guò)的人估計(jì)第一反應(yīng)就是IOC和AOP,的確,這兩個(gè)就是Spring的核心知識(shí),也可以說(shuō)是一種思想理念。...

  • 面試問(wèn)題:MySQL亂序insert和有序insert的效率比較?嘗試分析原因
    解答:這個(gè)問(wèn)題可以從索引結(jié)構(gòu)B+樹講起。我們都知道不管是順序插入還是亂序插入數(shù)據(jù),當(dāng)數(shù)據(jù)一旦超過(guò)緩存頁(yè)大?。ㄒ话闶?6KB),必然會(huì)導(dǎo)致也分裂,這時(shí)相應(yīng)的索引結(jié)構(gòu)也會(huì)發(fā)生改變。順序和亂序的區(qū)別就在于——順序插入只需要維護(hù)索引頁(yè),而亂序插入可能發(fā)生數(shù)據(jù)遷移,當(dāng)一頁(yè)數(shù)據(jù)遷移量很大時(shí),帶來(lái)的磁盤IO成本是很高的;再者,從磁盤的角度來(lái)說(shuō),InnoDB會(huì)把葉子頁(yè)按順序在磁盤中存儲(chǔ),假設(shè)之前存在兩個(gè)緩存頁(yè)A,B已經(jīng)在磁盤中有序了,這時(shí)插入幾條新數(shù)據(jù)導(dǎo)致分裂的頁(yè)C從邏輯上來(lái)說(shuō)順序應(yīng)該處于A,B之間的,但這是放入磁盤并不會(huì)物理上有序,導(dǎo)致讀取數(shù)據(jù)時(shí),磁盤IO存在隨機(jī)讀取,降低速度。

    Mysql總結(jié)

    1.執(zhí)行原理 今天我們來(lái)說(shuō)說(shuō)mysql,作為目前使用最為廣泛的數(shù)據(jù)庫(kù),mysql中有很多值得我們深挖的技術(shù)和思想。首先,先來(lái)聊聊一條sql語(yǔ)句是如何運(yùn)行的。 ①與MySQL建...

  • 120
    jVM總結(jié)

    1.類加載過(guò)程 話不多少,先上圖! 首先在講之前宏觀上我們要理解一點(diǎn),JVM本身是運(yùn)行在操作系統(tǒng)上的,它在啟動(dòng)時(shí)會(huì)向操作系統(tǒng)申請(qǐng)一片內(nèi)存空間供其自身使用,所以以下我說(shuō)的內(nèi)存都...

  • 120
    Mysql總結(jié)

    1.執(zhí)行原理 今天我們來(lái)說(shuō)說(shuō)mysql,作為目前使用最為廣泛的數(shù)據(jù)庫(kù),mysql中有很多值得我們深挖的技術(shù)和思想。首先,先來(lái)聊聊一條sql語(yǔ)句是如何運(yùn)行的。 ①與MySQL建...

  • 120
    高并發(fā)多線程總結(jié)

    1.多線程基本概念 首先,我們要理解多線程編程,必須清楚幾個(gè)基本概念:進(jìn)程——進(jìn)程是操作系統(tǒng)層面的概念,它是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位線程——線程是進(jìn)程內(nèi)部的程序流...

個(gè)人介紹
每個(gè)人都缺乏什么
我們才會(huì)瞬間不快樂(lè)
單純很難 包袱很多
忘卻一切 贏得片刻——安靜!
乐至县| 施秉县| 临夏县| 社旗县| 平潭县| 宁明县| 景宁| 马鞍山市| 柳河县| 文成县| 平安县| 浦东新区| 孝义市| 曲水县| 沁源县| 遂川县| 同心县| 锦州市| 扎兰屯市| 南陵县| 周口市| 岑溪市| 偏关县| 新和县| 天台县| 望城县| 昌图县| 永吉县| 洛川县| 赞皇县| 长丰县| 湟源县| 大同县| 宿州市| 木里| 海林市| 铁岭市| 德清县| 沂源县| 六枝特区| 虎林市|