<strike id="mxvdv"><dfn id="mxvdv"></dfn></strike>
<li id="mxvdv"></li>
<dl id="mxvdv"></dl>

        <dl id="mxvdv"><td id="mxvdv"></td></dl>

        藍(lán)鷗旗下品牌:鷗課學(xué)院
        全國咨詢電話:13152008057
        您的位置: 首頁 > 最新資訊 > 【原創(chuàng)】線程歷險記

        【原創(chuàng)】線程歷險記

        2017-08-30 藍(lán)鷗
        3750人 瀏覽:

           本文由藍(lán)鷗講師原創(chuàng),用小故事的形式讓你深刻理解關(guān)于線程的一切!

          第一回 初生牛犢

          我是一個線程,我一出生就被編了個號:0x3704,然后被領(lǐng)到一個昏暗的屋子里,在這里我發(fā)現(xiàn)了很多和我一模一樣的同伴。

          我身邊的同伴0x6900 待的時間比較長,他帶著滄桑的口氣對我說:“我們線程的宿命就是處理包裹。把包裹處理完以后還得馬上回到這里,否則可能永遠(yuǎn)回不來了。”

          我一臉懵懂,“包裹,什么包裹?”

          “不要著急,馬上你就會明白了,我們這里是不養(yǎng)閑人的?!?/p>

          果然,沒多久,屋子的門開了, 一個面貌兇惡的家伙吼道:“0x3704 ,出來!”

          我一出來就被塞了一個沉甸甸的包裹,上面還附帶著一個寫滿了操作步驟的紙。

          “快去,把這個包裹處理了。”

          “去哪兒處理?”

          “跟著指示走,先到就緒車間。”

          果然,地上有指示箭頭,跟著它來到了一間明亮的大屋子,這里已經(jīng)有不少線程了,大家都很緊張,好像時刻準(zhǔn)備著往前沖。

          我剛一進(jìn)來,就聽見廣播說:“0x3704,進(jìn)入車間?!?/p>

          我趕緊往前走,身后有很多人議論。

          “他太幸運了,剛進(jìn)入就緒狀態(tài)就能運行。”

          “是不是有關(guān)系?”

          “不是,你看人家的優(yōu)先級多高啊,唉!”

          前邊就是車間,這里簡直是太美了,怪不得老線程總是嘮叨著說:“要是能一直待在這里就好了?!?/p>

          這里空間大,視野好,空氣清新,鳥語花香,還有很多從來沒見過的人,像服務(wù)員一樣等著為我服務(wù)。

          他們也都有編號,更重要的是每個人還有個標(biāo)簽,上面寫著:硬盤、數(shù)據(jù)庫、內(nèi)存、網(wǎng)卡……

          我現(xiàn)在理解不了,看看操作步驟吧。

          第一步:從包裹中取出參數(shù)。

          打開包裹,里邊有個HttpRequest對象,可以取到userName、 password兩個參數(shù)。

          第二步:執(zhí)行登錄操作。

          奧,原來是有人要登錄啊,我把userName、password交給數(shù)據(jù)庫服務(wù)員,他拿著數(shù)據(jù),慢騰騰地走了。

          他怎么這么慢?不過我是不是正好可以在車間里多待一會兒?反正也沒法執(zhí)行第三步。

          就在這時,車間里的廣播響了:“0x3704,我是CPU,記住你正在執(zhí)行的步驟,然后馬上帶著包裹離開!”

          我慢騰騰地開始收拾。

          “快點,別的線程馬上就要進(jìn)來了?!?/p>

          離開這個車間,又來到一個大屋子,這里有很多線程在慢騰騰地喝茶,打牌。

          “哥們,你們沒事干了?”

          “你新來的吧,你不知道我在等數(shù)據(jù)庫服務(wù)員給我數(shù)據(jù)啊!據(jù)說他們比我們慢好幾十萬倍,在這里好好歇吧?!?/p>

          “???這么慢!我這里有人在登錄系統(tǒng),能等這么長時間嗎?”

          “放心,你沒聽說過人間一天,CPU一年嗎?我們這里是用納秒、毫秒計時的,人間等待一秒,相當(dāng)于我們好幾天呢,來得及?!?/p>

          干脆睡一會吧。不知道過了多久,大喇叭又開始廣播了:“0x3704,你的數(shù)據(jù)來了,快去執(zhí)行!”

          我轉(zhuǎn)身就往CPU車間跑,發(fā)現(xiàn)這里的門只出不進(jìn)!

          后面?zhèn)鱽黻囮嚭逍β暎骸肮皇切氯耍恢肋€得去就緒車間等。”

          于是趕緊到就緒車間,這次沒有那么好運了,等了好久才被再次叫進(jìn)CPU車間。

          在等待的時候,我聽見有人小聲議論:

          “聽說了嗎,最近有個線程被kill掉了?!?/p>

          “為啥?。俊?/p>

          “這家伙賴在CPU車間不走,把CPU利用率一直搞成100%,后來就被kill掉了。”

          “Kill掉以后弄哪兒去了?”

          “可能被垃圾回收了吧?!?/p>

          我心里打了個寒噤,趕緊接著處理,剩下的動作快多了,第二步登錄成功。

          第三步:構(gòu)建登錄成功后的主頁。

          這一步有點費時,因為有很多HTML需要處理,不知道代碼誰寫的,處理起來很煩人。

          我正在緊張的制作HTML呢, CPU又開始叫了:

          “0x3704,我是CPU ,記住你正在執(zhí)行的步驟,然后馬上帶著包裹離開!”

          “為啥???”

          “每個線程只能在CPU上運行一段時間,到了時間就得讓別人用了,你去就緒車間待著,等著叫你吧。”

          就這樣,我一直在“就緒——運行”這兩個狀態(tài)中不知道輪轉(zhuǎn)了多少次, 終于按照步驟清單把工作做完了。

          最后順利地把包含html的包裹發(fā)了回去。至于登錄以后干什么事兒,我就不管了。馬上就要回到我那昏暗的房間了,真有點舍不得這里。不過相對于有些線程,我還是幸運的,他們運行完以后就被徹底地銷毀了,而我還活著!

          回到了小黑屋,老線程0x6900問:

          “怎么樣?第一天有什么感覺?”

          “我們的世界規(guī)則很復(fù)雜,首先你不知道什么時候會被挑中執(zhí)行;第二,在執(zhí)行的過程中隨時可能被打斷,讓出CPU車間;第三,一旦出現(xiàn)硬盤、數(shù)據(jù)庫這樣耗時的操作,也得讓出CPU去等待;第四,就是數(shù)據(jù)來了,你也不一定馬上執(zhí)行,還得等著CPU挑選?!?/p>

          “小伙子理解的不錯啊?!?/p>

          “我不明白為什么很多線程執(zhí)行完任務(wù)就死了,為什么咱們還活著?”

          “你還不知道?長生不老是我們的特權(quán)!我們這里有個正式的名稱,叫作線程池!

          第二回 漸入佳境

          平淡的日子就這么一天天地過去,作為一個線程,我每天的生活都是取包裹、處理包裹,然后回到我們昏暗的家:線程池。

          有一天我回來的時候,聽到有個兄弟說,今天要好好休息下,明天就是最瘋狂的一天。我看了一眼日歷,明天是 11月11號。

          果然,零點剛過,不知道那些人類怎么了,瘋狂地投遞包裹,為了應(yīng)付蜂擁而至的海量包裹,線程池里沒有一個人能閑下來,全部出去處理包裹,CPU車間利用率超高,硬盤在嗡嗡轉(zhuǎn),網(wǎng)卡瘋狂的閃,即便如此,還是處理不完,堆積如山。

          我們也沒有辦法,實在是太多太多了,這些包裹中大部分都是瀏覽頁面,下訂單,買、買、買。

          不知道過了多久,包裹山終于慢慢地消失了。終于能夠喘口氣,我想我永遠(yuǎn)都不會忘記這一天。

          通過這個事件,我明白了我所處的世界:這是一個電子商務(wù)的網(wǎng)站!

          我每天的工作就是處理用戶的登錄,瀏覽,購物車,下單,付款。

          我問線程池的元老0x6900:“我們要工作到什么時候?”

          “要一直等到系統(tǒng)重啟的那一刻?!?x6900說。

          “那你經(jīng)歷過系統(tǒng)重啟嗎?”

          “怎么可能?系統(tǒng)重啟就是我們的死亡時刻,也就是世界末日,一旦重啟,整個線程池全部銷毀,時間和空間全部消失,一切從頭再來?!?/p>

          “那什么時候會重啟?”

          “這就不好說了,好好享受眼前的生活吧……”

          其實生活還是豐富多彩的,我最喜歡的包裹是上傳圖片,由于網(wǎng)絡(luò)慢,所以能在就緒車間、CPU車間待很長很長時間,可以認(rèn)識很多好玩的線程。

          比如說上次認(rèn)識了memecached 線程,他對我說在他的幫助下緩存了很多的用戶數(shù)據(jù),還是分布式的!很多機器上都有!

          我問他:“怪不得后來的登錄操作快了那么多,原來是不再從數(shù)據(jù)庫取數(shù)據(jù)了你那里就有啊,哎對了你是分布式的你去過別的機器沒有?”

          他說:“怎么可能!我每次也只能通過網(wǎng)絡(luò)往那個機器發(fā)送一個GET、PUT命令才存取數(shù)據(jù)而已,別的一概不知?!?/p>

          再比如說上次在等待的時候遇到了數(shù)據(jù)庫連接的線程,我才知道他那里也是一個連接池,和我們的線程池幾乎一模一樣。

          他告訴我:“有些包裹太變態(tài)了,竟然查看一年的訂單數(shù)據(jù),簡直把我累死了?!?/p>

          我說:“拉倒吧你,你那是純數(shù)據(jù),你把數(shù)據(jù)傳給我以后,我還得組裝成HTML,工作量不知道比你大多少倍?!?/p>

          他建議我:“你一定要和memecached搞好關(guān)系,直接從他那兒拿數(shù)據(jù),盡量少直接調(diào)用數(shù)據(jù)庫,這樣我們JDBC connection也能活得輕松點?!?/p>

          我欣然接納:“好啊好啊,關(guān)鍵是你得提前把數(shù)據(jù)搞到緩存啊,要不然我先問一遍緩存,沒有數(shù)據(jù),我這不還得找你嗎?”

          生活就是這樣,如果你自己不找點樂子,還有什么意思?

          第三回 虎口脫險

          前幾天我遇到一個可怕的事情,差一點死在外邊,回不了線程池了。其實這次遇險我應(yīng)該能夠預(yù)想得到才對,真是太大意了。

          那天我處理了一些從http發(fā)來的存款和取款的包裹,老線程0x6900特意囑咐我:“處理這些包裹的時候一定要特別小心,你必須先獲得一把鎖,在對賬戶存款或取款的時候一定要把賬戶鎖住,要不然別的線程就會在你等待的時候趁虛而入,搞破壞,我年輕那會兒很毛糙,就捅了簍子。”

          為了“恐嚇”我, 好心的0x6900還給了我兩個表格:

          (1)****沒有加鎖的情況

        1.jpg

          (2)****加鎖的情況

        2.jpg

          我看得膽顫心驚,原來不加鎖會帶來這么嚴(yán)重的事故。從此以后看到存款、取款的包裹就倍加小心,還好沒有出過事故。

          今天我收到的一個包裹是轉(zhuǎn)賬,從某著名演員的賬戶給某著名導(dǎo)演的賬戶轉(zhuǎn)錢,具體是誰我就不透漏了,數(shù)額可真是不小。

          我按照老線程的吩咐,肯定要加鎖啊,先對著名演員的賬戶加鎖,再對著名導(dǎo)演的賬戶加鎖。

          可我萬萬沒想到的是,還有一個線程,對,就是0x7954, 竟然同時在從這個導(dǎo)演的賬戶往這個演員的賬戶轉(zhuǎn)賬。

          于是乎,就出現(xiàn)了這么個情況:

        3.jpg

          剛開始我還不知道什么情況,一直坐在等待車間傻等,可是等的時間太長了,長達(dá)幾十秒!我可從來沒有經(jīng)歷過這樣的事件。

          這時候我就看到了線程0x7954 , 他悠閑地坐在那里喝咖啡,我和他聊了起來:

          “哥們,我看你已經(jīng)喝了8杯咖啡了,怎么還不去干活?”

          “你不喝了9杯茶了嗎?”0x7954回敬道。

          “我在等一個鎖,不知道哪個孫子一直不釋放!”

          “我也在等鎖啊,我要是知道哪個孫子不釋放鎖我非揍死他不可!”0x7954毫不示弱。

          我偷偷地看了一眼,這家伙懷里不就抱著我正等的某導(dǎo)演的鎖嗎?

          很明顯,0x7954也發(fā)現(xiàn)了我正抱著他正在等待的鎖。

          很快我們兩個就吵了起來,互不相讓:

          “把你的鎖先給我,讓我先做完!”

          “不行,從來都是做完工作才釋放鎖,現(xiàn)在絕對不能給你!”

          從爭吵到打起來,就那么幾秒鐘的事兒。更重要的是,我們倆不僅僅持有這個著名導(dǎo)演和演員的鎖,還有很多其他的鎖,導(dǎo)致等待的線程越來越多,圍觀的人們把屋子都擠滿了。最后事情真的鬧大了,我從來沒見過的終極大boss“操作系統(tǒng)”也來了。大Boss畢竟見多識廣,他看了一眼,哼了一聲,很不屑地說:

          “又出現(xiàn)死鎖了?!?/p>

          “你們倆要Kill掉一個,來吧,過來抽簽?!?/p>

          這一下子把我給嚇尿了,這么嚴(yán)重?。∥覒?zhàn)戰(zhàn)兢兢地抽了簽,打開一看,是個“活”字。唉,小命終于保住了。

          可憐的0x7954被迫交出了所有的資源以后,很不幸地被kill掉,消失了。我拿到了導(dǎo)演的鎖,可以開始干活了。大Boss“操作系統(tǒng)”如一陣風(fēng)似的消失了,身后只傳來他的聲音:

          “記住,我們這里導(dǎo)演>演員,無論任何情況都要先獲得導(dǎo)演的鎖?!?/p>

          由于這里不僅僅只有導(dǎo)演和演員,還有很多其他人,大Boss留下了一個表格, 里邊是個算法,用來計算資源的大小,計算出來以后,永遠(yuǎn)按照從大到小的方式來獲得鎖:

        4.jpg5.jpg

          我回到線程池,大家都知道了我的歷險,圍著我問個不停。

          兇神惡煞的線程調(diào)度員把大Boss的算法貼到了墻上。

          每天早上,我們都得像無節(jié)操的房屋中介、美容美發(fā)店的服務(wù)員一樣,站在門口,像被耍猴一樣大聲背誦:

          “多個資源加鎖要牢記,一定要按Boss的算法比大小,然后從最大的開始加鎖。”

          第四回 江湖再見

          又過了很多天,我和其他線程們發(fā)現(xiàn)了一個奇怪的事情:包裹的處理越來越簡單,不管任何包裹,不管是登錄、瀏覽、存錢……處理的步驟都是一樣的, 返回一個固定的html頁面。

          有一次我偷偷地看了一眼,上面寫著:“本系統(tǒng)將于今晚 00:00 至4:00 進(jìn)行維護(hù)升級, 給您帶來的不便我們深感抱歉!”

          我去告訴了老線程0x6904,他嘆了一口氣說:

          “唉,我們的生命也到頭了,看來馬上就要重啟系統(tǒng),我們就要消失了,再見吧兄弟?!?/p>

          系統(tǒng)重啟的那一刻終于到來了。我看到屋子里的東西一個個的不見了,等待車間、就緒車間,甚至CPU車間都慢慢地消失了。我身邊的線程兄弟也越來越少,最后只剩我自己了。

          我在空曠的原野上大喊:“還有人嗎?”

          無人應(yīng)答。

          我們這一代線程池完成了使命……

          不過下一代線程池即將重生!

        1. 廣告1
        2. 廣告2
        3. 廣告3
        4. 廣告4
        久久人人爽人人爽人人丝袜V,国产黄片在线浏览,猛人精品无码精品在线播放,亚洲色欲久久www

        <strike id="mxvdv"><dfn id="mxvdv"></dfn></strike>
        <li id="mxvdv"></li>
        <dl id="mxvdv"></dl>

            <dl id="mxvdv"><td id="mxvdv"></td></dl>