轉(zhuǎn)載:我是一個線程

來自:碼農(nóng)翻身(微信號:coderising)
作者:IBM劉欣
我是一個線程针史,我一出生就被編了個號: 0x3704,然后被領(lǐng)到一個昏暗的屋子里面氓, 這里我發(fā)現(xiàn)了很多和我一模一樣的同伴紊搪。
  我身邊的同伴0x6900待的時間比較長, 他帶著滄桑的口氣對我說:
  “我們線程的宿命就是處理包裹寺庄。把包裹處理完以后還得馬上回到這里,否則可能永遠(yuǎn)回不來了力崇《诽粒”
  我一臉懵懂,包裹亮靴,什么包裹馍盟?
  “不要著急,馬上你就會明白了茧吊, 我們這里是不養(yǎng)閑人的贞岭。”
  果然搓侄,沒多久瞄桨,屋子的門開了, 一個面貌兇惡的家伙吼道:
  “0x3704 ,出來讶踪!”
  我一出來就被塞了一個沉甸甸的包裹芯侥,上面還有附帶著一個寫滿了操作步驟的紙。
  “快去,把這個包裹處理了柱查±螅”
  “去哪兒處理?”
  “跟著指示走唉工, 先到就緒車間”
  果然研乒,地上有指示箭頭,跟著它來到了一間明亮的大屋子淋硝,這里已經(jīng)有不少線程了告嘲, 大家都很緊張,好像時刻準(zhǔn)備著往前沖奖地。
  我剛一進(jìn)來橄唬,就聽見廣播說:“0x3704,進(jìn)入車間”
  我趕緊往前走参歹, 身后很多人議論說:
  ”他太幸運了仰楚, 剛進(jìn)入就緒狀態(tài)就能運行”
  “是不是有關(guān)系?”
  “不是犬庇,你看人家的優(yōu)先級多高啊僧界, 唉~”
  前邊就是車間, 這里簡直是太美了臭挽, 怪不得老線程總是嘮叨著說:要是能一直待在這里就好了捂襟。
  這里空間大,視野好欢峰,空氣清新葬荷,鳥語花香,還有很多從來沒見過的人纽帖,像服務(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)來了”
  離開這個車間, 又來到一個大屋子耘婚,這里很多線程慢騰騰的在喝茶罢浇,打牌。
  “哥們沐祷,你們沒事干了嚷闭?”
  “你新來的吧,你不知道我在等數(shù)據(jù)庫服務(wù)員給我數(shù)據(jù)啊赖临,據(jù)說他們比我們慢好幾十萬倍胞锰, 在這里好好歇吧”
  “啊兢榨? 這么慢嗅榕? 我這里有人在登錄系統(tǒng), 能等這么長時間嗎”
  “放心吵聪,你沒聽說過人間一天誊册,CPU一年嗎, 我們這里是用納秒暖璧,毫秒計時的案怯,人間等待一秒,相當(dāng)于我們好幾天呢澎办,來的及”
  干脆睡一會吧 嘲碱, 不知道過了多久 ,大喇叭又開始廣播了:
  “0x3704局蚀, 你的數(shù)據(jù)來了麦锯,快去執(zhí)行”
  我轉(zhuǎn)身就往CPU車間跑,發(fā)現(xiàn)這里的們只出不進(jìn)琅绅!
  后面?zhèn)鱽黻囮嚭逍β暎?/strong>
  “果然是新人扶欣,不知道還得去就緒車間等”
  于是趕緊到就緒車間,這次沒有那么好運了,等了好久才被再次叫進(jìn)CPU車間料祠。
  在等待的時候骆捧, 我聽見有人小聲議論:
  “聽說了嗎,最近有個線程被kill掉了”
  “為啥八枵馈敛苇?”
  “這家伙賴在CPU車間不走,把CPU利用率一直搞成100%顺呕,后來就被kill掉了”
  “Kill掉以后弄哪兒去了”
  “可能被垃圾回收了吧”
  我心里打了個寒噤 枫攀, 趕緊接著處理,收下的動作塊多了株茶,第二步登錄成功了来涨。
  第三步:構(gòu)建登錄成功后的主頁
  這一步有點費時間, 因為有很多HTML需要處理启盛, 不知道代碼誰寫的蹦掐,處理起來很煩人。
  我正在緊張的制作HTM呢驰徊, 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挑選”
  “小伙子理解的不錯啊”
  “我不明白為什么很多線程都執(zhí)行完就死了, 為什么咱們還活著屑宠?”
  “你還不知道厢洞,長生不老是我們的特權(quán),我們這里有個正式的名稱典奉,叫做線程池躺翻!”
  平淡的日子就這么一天天過去,作為一個線程卫玖,我每天的生活都是取包裹公你,處理包裹,然后回到我們昏暗的家:線程池假瞬。
  有一天我回來的時候陕靠,聽到有個兄弟說,今天要好好休息下脱茉,明天就是最瘋狂的一天剪芥。
  我看了一眼日歷,明天是 11月11號琴许。
  果然税肪,零點剛過,不知道那些人類怎么了榜田,瘋狂的投遞包裹益兄,為了應(yīng)付蜂擁而至的海量包裹,線程池里沒有一個人能閑下來串慰,全部出去處理包裹偏塞,CPU車間利用率超高,硬盤在嗡嗡轉(zhuǎn)邦鲫,網(wǎng)卡瘋狂的閃灸叼,即便如此神汹,還是處理不完,堆積如山古今。
  我們也沒有辦法屁魏,實在是太多太多了,這些包裹中大部分都是瀏覽頁面捉腥,下訂單氓拼,買,買抵碟,買桃漾。
  不知道過了多久,包裹山終于慢慢的消失了拟逮。
  終于能夠喘口氣撬统, 我想我永遠(yuǎn)都不會忘記這一天。
  通過這個事件敦迄,我明白了我所處的世界:這是一個電子商務(wù)的網(wǎng)站恋追!
  我每天的工作就是處理用戶的登錄,瀏覽罚屋, 購物車苦囱,下單,付款脾猛。
  我問線程池的元老0x6900:“我們要工作到什么時候撕彤?”
  “要一直等到系統(tǒng)重啟的那一刻”,0x6900說尖滚。
  “那你經(jīng)歷過系統(tǒng)重啟嗎喉刘?”
  “怎么可能?系統(tǒng)重啟就是我們的死亡時刻漆弄, 也就是世界末日睦裳,一旦重啟,整個線程池全部銷毀撼唾,時間和空間全部消失廉邑,一切從頭再來”
  “那什么時候會重啟?”
  “這就不好說了倒谷,好好享受眼前的生活吧.....”
  其實生活豐富多彩蛛蒙,我最喜歡的包裹是上傳圖片,由于網(wǎng)絡(luò)慢渤愁,所以能在就緒車間牵祟,CPU車間待很長很長時間,可以認(rèn)識很多好玩的線程抖格。
  比如說上次認(rèn)識了memecached線程诺苹,他給我說通過他緩存了很多的用戶數(shù)據(jù)咕晋, 還是分布式的! 很多機器上都有收奔!
  我說怪不得后來的登錄操作快了那么多掌呜, 原來是不再從數(shù)據(jù)庫取數(shù)據(jù)了你那里就有啊,哎坪哄,對了质蕉,你是分布式的,你去過別的機器沒有翩肌?
  他說怎么可能模暗,我每次也只能通過網(wǎng)絡(luò)往那個機器發(fā)送一個GET, PUT命令才存取數(shù)據(jù)而已,別的一概不知摧阅。
  再比如說上次在等待的時候遇到了數(shù)據(jù)庫連接的線程汰蓉,我才知道它他那里也是一個連接池绷蹲,和我們線程池幾乎一模一樣棒卷。
  他說有些包裹太變態(tài)了,竟然查看一年的訂單數(shù)據(jù)祝钢,簡直把我累死了比规。
  我說拉倒吧你四敞,你那是純數(shù)據(jù)裁蚁,你把數(shù)據(jù)傳給我以后宠默,我還得組裝成HTML羡榴,工作量不知道比你大多少倍拓售。
  他說一定你要和memecached搞好關(guān)系桌硫,直接從他那兒拿數(shù)據(jù)俺叭,盡量少直接調(diào)用數(shù)據(jù)庫发魄,我們JDBC connection也能活的輕松點铃拇。
  我說好啊好啊钞瀑,關(guān)鍵是你得提前把數(shù)據(jù)搞到緩存啊,要不然我先問一遍緩存慷荔,沒有數(shù)據(jù)雕什,我這不還得找你嗎?
  生活就是這樣显晶,如果你自己不找點樂子贷岸,還有什么意思?
  有一天我遇到一個可怕的事情磷雇, 差一點死在外邊偿警,回不了線程池了......
  其實這次遇險我應(yīng)該能夠預(yù)想到才對, 太大意了唯笙。
  前幾天我處理過一些從http發(fā)來的存款和取款的包裹螟蒸,老線程0x6900特意囑咐我:
  “處理這些包裹的時候要特別小心落剪,你得一定要先獲得一把鎖,在對賬戶存款或者取款的時候一定要把賬戶給鎖住尿庐,要不然別的線程就會在你等待的時候趁虛而入忠怖,搞破壞,我年輕那會兒很毛糙抄瑟,就捅了簍子”
  為了“恐嚇”我凡泣,好心的0x6900還給了我兩個表格:
  1、沒有加鎖的情況


  2皮假、加鎖的情況

  我看的膽顫心驚鞋拟, 原來不加鎖會帶來這么嚴(yán)重的事故。
  從此以后看到存款惹资,取款的包裹就倍加小心贺纲,還好,沒有出過事故褪测。
  今天我收到的一個包裹是轉(zhuǎn)賬猴誊,從某著名演員的賬號給某著名導(dǎo)演賺錢,具體是誰我就不透漏了侮措,數(shù)額可真是不小懈叹。
  我按照老線程的吩咐,肯定要加鎖啊分扎,先對著名演員賬號加鎖澄成,在對著名導(dǎo)演賬號加鎖。
  可我萬萬沒想到的是畏吓,還有一個線程墨状,對,就是0x7954菲饼,竟然同時在從這個導(dǎo)演到往這個演員轉(zhuǎn)賬肾砂。
  于是乎,就出現(xiàn)了這么個情況:

  剛開始我還不知道什么情況巴粪,一直坐在等待車間傻等通今,可是等的時間太長了,長達(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)死鎖了”
  “你們倆要Kill掉一個, 來吧梆暖,過來抽簽”
  這一下子把我給嚇尿了伞访,這么嚴(yán)重啊轰驳!
  我戰(zhàn)戰(zhàn)兢兢的抽了簽厚掷,打開一看,是個"活"字级解。
  唉冒黑,小命終于保住了。
  可憐的0x7954被迫交出了所有的資源以后勤哗,很不幸的被kill掉抡爹,消失了。
  我拿到了導(dǎo)演的鎖芒划,可以開始干活了冬竟。
  大Boss操作系統(tǒng)如一陣風(fēng)似的消失了欧穴,身后只傳來他的聲音:
  “記住, 我們這里導(dǎo)演>演員泵殴,無論認(rèn)識情況都要先獲得導(dǎo)演的鎖”
  由于不僅僅是只有導(dǎo)演和演員涮帘,還有很多其他人,Boss留下了一個表格笑诅,里邊是個算法焚辅,用來計算資源的大小,計算出來以后苟鸯,永遠(yuǎn)按照從大到小的方式來獲得鎖:


  我回到線程池同蜻,大家都知道了我的歷險,圍著我問個不停早处。
  兇神惡煞的線程調(diào)度員把大Boss的算法貼到了墻上湾蔓。
  每天早上,我們都得像無節(jié)操的房屋中介砌梆,美容美發(fā)店的服務(wù)員一樣默责,站在門口,像被耍猴一樣大聲背誦:
  “多個資源加鎖要牢記咸包,一定要按Boss的算法比大小桃序,然后從最大的開始加鎖”
  又過了很多天,我和其他線程們發(fā)現(xiàn)了一個奇怪的事情:包裹的處理越來越簡單烂瘫。不管任何包裹媒熊,不管是登錄, 瀏覽坟比,存錢..... 處理的步驟都是一樣的芦鳍,返回一個固定的html頁面。
  有一次我偷偷的看了一眼葛账,上面寫著:
  “本系統(tǒng)將于今晚 00:00 至 4:00 進(jìn)行維護(hù)升級柠衅, 給你帶來的不便我們深感抱歉”
  我去告訴了老線程0x6904,他嘆了一口氣說:
  “唉籍琳,我們的生命也到頭了菲宴,看來馬上就要重啟系統(tǒng),我們就要消失了趋急,再見吧兄弟喝峦。”
  系統(tǒng)重啟的那一刻終于到來了宣谈∮蹋 
  我看到屋子里的東西一個個的不見了,等待車間,就緒車間漩怎,甚至CPU車間都慢慢的消失了勋颖。
  我身邊的線程兄弟也越來越少,最后只剩我自己了勋锤。
  我在空曠的原野上大喊:還有人嗎饭玲?
  無人應(yīng)答。
  我們這一代線程池完成了使命叁执。
  下一代線程池將很快重生茄厘。

原文鏈接:原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谈宛,隨后出現(xiàn)的幾起案子次哈,更是在濱河造成了極大的恐慌,老刑警劉巖吆录,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窑滞,死亡現(xiàn)場離奇詭異,居然都是意外死亡恢筝,警方通過查閱死者的電腦和手機哀卫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撬槽,“玉大人此改,你說我怎么就攤上這事≈度幔” “怎么了共啃?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勋拟。 經(jīng)常有香客問我勋磕,道長,這世上最難降的妖魔是什么敢靡? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮苦银,結(jié)果婚禮上啸胧,老公的妹妹穿的比我還像新娘。我一直安慰自己幔虏,他們只是感情好纺念,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著想括,像睡著了一般陷谱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天烟逊,我揣著相機與錄音渣窜,去河邊找鬼。 笑死宪躯,一個胖子當(dāng)著我的面吹牛乔宿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播访雪,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼详瑞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了臣缀?” 一聲冷哼從身側(cè)響起坝橡,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎精置,沒想到半個月后计寇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡氯窍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年饲常,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狼讨。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡贝淤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出政供,到底是詐尸還是另有隱情播聪,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布布隔,位于F島的核電站离陶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏衅檀。R本人自食惡果不足惜招刨,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哀军。 院中可真熱鬧沉眶,春花似錦、人聲如沸杉适。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猿推。三九已至片习,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藕咏。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工状知, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侈离。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓试幽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親卦碾。 傳聞我的和親對象是個殘疾皇子铺坞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 我是一個線程, 我一出生就被編了個號: 0x3704, 然后被領(lǐng)到一個昏暗的屋子里洲胖, 這里我發(fā)現(xiàn)了很多和我一模...
    天天想念閱讀 317評論 0 0
  • 來自:碼農(nóng)翻身(微信號:coderising)作者:IBM劉欣 我是一個線程济榨, 我一出生就被編了個號: 0x370...
    Jannonx閱讀 896評論 2 2
  • 第一回 初生牛犢 我是一個線程,我一出生就被編了個號:0x3704绿映,然后被領(lǐng)到一個昏暗的屋子里擒滑,在這里我發(fā)現(xiàn)了很多...
    七弦桐語閱讀 481評論 1 3
  • 手繪石頭 石頭在生活中隨處可見淹冰,你有關(guān)注過它們嗎库车?你知道它們有多好玩嗎? 石頭也可以充滿生命樱拴,蠢萌柠衍、可愛,或者深沉...
    南溪閱讀 3,439評論 98 160
  • 丁公藤 別名:包公藤晶乔、麻辣仔藤珍坊、斑魚烈 采收加工:全年可采,洗凈正罢,切成段阵漏,隔水蒸2-4h,取山曬干翻具。 基源植物:旋...
    本草園丁閱讀 807評論 0 0