我是一個(gè)線程池中的線程

來自:碼農(nóng)翻身(微信號:coderising)

作者:IBM劉欣

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

我身邊的同伴0x6900 待的時(shí)間比較長话侧, 他帶著滄桑的口氣對我說:

我們線程的宿命就是處理包裹灸芳。 把包裹處理完以后還得馬上回到這里,否則可能永遠(yuǎn)回不來了是尔。

我一臉懵懂,包裹开仰,什么包裹拟枚?

”不要著急,馬上你就會明白了众弓, 我們這里是不養(yǎng)閑人的恩溅。“

果然谓娃,沒多久脚乡,屋子的門開了, 一個(gè)面貌兇惡的家伙吼道:

"0x3704 ,出來1醮铩"

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

"快去捡遍,把這個(gè)包裹處理了锌订。"

"去哪兒處理"

"跟著指示走, 先到就緒車間"

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

我剛一進(jìn)來续挟,就聽見廣播說:“0x3704, 進(jìn)入車間”

我趕緊往前走紧卒, 身后很多人議論說:

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

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

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

前邊就是車間贬媒, 這里簡直是太美了, 怪不得老線程總是嘮叨著說:要是能一直待在這里就好了肘习。

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

他們也都有編號养葵, 更重要的是每個(gè)人還有個(gè)標(biāo)簽征堪,上面寫著:硬盤,數(shù)據(jù)庫关拒,內(nèi)存佃蚜,網(wǎng)卡...

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

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

打開包裹着绊, 里邊有個(gè)HttpRequest ?對象, 可以取到 userName, password兩個(gè)參數(shù)

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

奧谐算,原來是有人要登錄啊,我把userName/password 交給 數(shù)據(jù)庫服務(wù)員归露,他拿著數(shù)據(jù)洲脂, 慢騰騰的走了。

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

就在這時(shí),車間里的廣播響了:

"0x3704, ?我是CPU , 記住你正在執(zhí)行的步驟疆液, 馬上帶包裹離開"

我慢騰騰的開始收拾

”快點(diǎn)踩蔚, 別的線程馬上就要進(jìn)來了“

離開這個(gè)車間, 又來到一個(gè)大屋子枚粘,這里很多線程慢騰騰的在喝茶馅闽,打牌。

”哥們馍迄,你們沒事干了福也?“

”你新來的把,?你不知道我在等數(shù)據(jù)庫服務(wù)員給我數(shù)據(jù)芭嗜Α暴凑! ,據(jù)說他們比我們慢好幾十萬倍赘来, 在這里好好歇吧“

”跋衷? 這么慢犬辰? ?我這里有人在登錄系統(tǒng)嗦篱, 能等這么長時(shí)間嗎"

”放心,你沒聽說過人間一天幌缝, CPU一年嗎灸促, 我們這里是用納秒,毫秒計(jì)時(shí)的, 人間等待一秒浴栽,相當(dāng)于我們好幾天呢荒叼, 來的及“

干脆睡一會吧 , 不知道過了多久 典鸡,大喇叭又開始廣播了:

"0x3704被廓, 你的數(shù)據(jù)來了,快去執(zhí)行”

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

后面?zhèn)鱽黻囮嚭逍β暎?/b>

”果然是新人, 不知道還得去就緒車間等“

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

在等待的時(shí)候汁尺, 我聽見有人小聲議論:

”聽說了嗎法精,最近有個(gè)線程被kill掉了“

”為啥啊痴突?“

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

”Kill掉以后弄哪兒去了“

”可能被垃圾回收了吧“

我心里打了個(gè)寒噤 辽装, ?趕緊接著處理帮碰,?收下的動作塊多了,第二步登錄成功了

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

這一步有點(diǎn)費(fèi)時(shí)間拾积, 因?yàn)橛泻芏郒TML需要處理殉挽, 不知道代碼誰寫的,處理起來很煩人拓巧。

我正在緊張的制作html呢斯碌, CPU有開始叫了:

"0x3704, ?我是CPU , 記住你正在執(zhí)行的步驟, 馬上帶包裹離開"

”為啥啊“

”每個(gè)線程只能在CPU上運(yùn)行一段時(shí)間肛度,到了時(shí)間就得讓別人用了傻唾, 你去就緒車間待著, 等著叫你吧“

就這樣承耿, 我一直在就緒-運(yùn)行 這兩個(gè)狀態(tài)冠骄,不知道輪轉(zhuǎn)了多少次, 終于安裝步驟清單把工作做完了加袋。

最后順利的把包含html的包裹發(fā)了回去凛辣。

至于登錄以后干什么事兒 , 我就不管了锁荔。

馬上就要回到我那昏暗的房間了蟀给, 真有點(diǎn)舍不得這里蝙砌。

不過相對于有些線程阳堕, 我還是幸運(yùn)的跋理, 他們運(yùn)行完以后就徹底的銷毀了,而我還活著 恬总!

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

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

”我們的世界規(guī)則很復(fù)雜 拭卿, 首先你不知道什么時(shí)候會被挑中執(zhí)行;? 第二 ,在執(zhí)行的過程中隨時(shí)可能被打斷贱纠,讓出CPU車間;

第三峻厚,一旦出現(xiàn)硬盤,數(shù)據(jù)庫這樣耗時(shí)的操作也得讓出CPU,去等待; ?第四谆焊,就是數(shù)據(jù)來了惠桃,你也不一定馬上執(zhí)行,還得等著CPU挑選“

”小伙子理解的不錯(cuò)啊“

”我不明白為什么很多線程都執(zhí)行完就死了辖试, 為什么咱們還活著辜王?“

”你還不知道, 長生不老是我們的特權(quán)罐孝, 我們這里有個(gè)正式的名稱呐馆,叫做?線程池!“

平淡的日子就這么一天天過去莲兢, 作為一個(gè)線程汹来, 我每天的生活都是取包裹,處理包裹改艇,然后回到我們昏暗的家:線程池俗慈。

有一天我回來的時(shí)候, 聽到有個(gè)兄弟說遣耍, 今天要好好休息下闺阱,明天就是最瘋狂的一天。

我看了一眼日歷舵变,明天是 11月11號 酣溃。

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

我們也沒有辦法,實(shí)在是太多太多了柳爽, 這些包裹中大部分都是瀏覽頁面媳握,下訂單,買磷脯,買蛾找,買。

不知道過了多久赵誓, 包裹山終于慢慢的消失了打毛。

終于能夠喘口氣, 我想我永遠(yuǎn)都不會忘記這一天架曹。

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

我每天的工作就是處理用戶的登錄绑雄,瀏覽展辞, 購物車,下單万牺,付款罗珍。

我問線程池的元老0x6900 : " 我們要工作到什么時(shí)候?"

" 要一直等到系統(tǒng)重啟的那一刻"脚粟,?0x6900?說

" 那你經(jīng)歷過系統(tǒng)重啟嗎覆旱?"

" 怎么可能? , 系統(tǒng)重啟就是我們的死亡時(shí)刻核无, 也就是世界末日扣唱,一旦重啟, 整個(gè)線程池全部銷毀团南,時(shí)間和空間全部消失噪沙,一切從頭再來”

" 那什么時(shí)候會重啟?"

" 這就不好說了,好好享受眼前的生活吧....."

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

比如說上次認(rèn)識了memecached 線程,他給我說通過他緩存了很多的用戶數(shù)據(jù)萄唇, 還是分布式的檩帐! 很多機(jī)器上都有!

我說怪不得后來的登錄操作快了那么多穷绵, 原來是不再從數(shù)據(jù)庫取數(shù)據(jù)了你那里就有啊轿塔, 哎對了你是分布式的你去過別的機(jī)器沒有特愿?

他說怎么可能我每次也只能通過網(wǎng)絡(luò)往那個(gè)機(jī)器發(fā)送一個(gè)GET, PUT命令才存取數(shù)據(jù)而已仲墨, 別的一概不知。

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

他說有些包裹太變態(tài)了毒嫡,竟然查看一年的訂單數(shù)據(jù)癌蚁, 簡直把我累死了。

我說拉倒吧你兜畸, 你那是純數(shù)據(jù)努释, 你把數(shù)據(jù)傳給我以后,我還得組裝成HTML, ?工作量不知道比你大多少倍咬摇。

他說一定你要和memecached搞好關(guān)系伐蒂,直接從他那兒拿數(shù)據(jù),盡量少直接調(diào)用數(shù)據(jù)庫肛鹏, 我們JDBC connection也能活的輕松點(diǎn)逸邦。

我說好啊好啊, 關(guān)鍵是你得提前把數(shù)據(jù)搞到緩存啊在扰, 要不然我先問一遍緩存缕减, 沒有數(shù)據(jù), 我這不還得找你嗎芒珠?

生活就是這樣桥狡, 如果你自己不找點(diǎn)樂子,還有什么意思皱卓?

有一天我遇到一個(gè)可怕的事情裹芝, 差一點(diǎn)死在外邊,回不了線程池了......

其實(shí)這次遇險(xiǎn)我應(yīng)該能夠預(yù)想到才對好爬, 太大意了局雄。

前幾天我處理過一些從http 發(fā)來的存款和取款的包裹, 老線程0x6900 特意囑咐我:

"處理這些包裹的時(shí)候要特別小心存炮, 你得一定要先獲得一把鎖炬搭, 在對賬戶存款或者取款的時(shí)候一定要把賬戶給鎖住蜈漓, 要不然別的線程就會在你等待的時(shí)候趁虛而入,搞破壞宫盔, 我年輕那會兒很毛糙融虽,就捅了簍子"

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

1灼芭、沒有加鎖的情況

2有额、加鎖的情況

我看的膽顫心驚, 原來不加鎖會帶來這么嚴(yán)重的事故彼绷。

從此以后看到存款巍佑,取款的包裹就倍加小心, 還好寄悯,沒有出過事故萤衰。

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

我按照老線程的吩咐, 肯定要加鎖啊洒擦, 先對著名演員賬號加鎖椿争, 在對著名導(dǎo)演賬號加鎖。

可我萬萬沒想到的是熟嫩, 還有一個(gè)線程秦踪,對,就是0x7954, ?竟然同時(shí)在從這個(gè)導(dǎo)演到往這個(gè)演員轉(zhuǎn)賬邦危。

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

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

這時(shí)候我就看到了線程0x7954 , 他悠閑的坐在那里喝咖啡裁僧, 我和他聊了起來:

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

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

“我在等一個(gè)鎖获洲, 不知道哪個(gè)孫子一直不釋放”

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

我偷偷的看了一眼贡珊, 這家伙懷里不就抱著我正在等的 某導(dǎo)演的鎖嘛最爬?

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

很快我們兩個(gè)就吵了起來爱致, 互不相讓:

"把你的鎖先給我, 讓我先做完"

"不行寒随, 從來都是做完工作才釋放鎖糠悯, 現(xiàn)在絕對不能給你"

從爭吵到打起來, 就那么幾秒鐘的事兒妻往。

更重要的是互艾, 我們倆不僅僅持有這個(gè)著名導(dǎo)演和演員的鎖, 還有很多其他的鎖蒲讯, 導(dǎo)致等待的線程越來越多忘朝, 圍觀的人們把屋子都擠滿了灰署。

最后事情真的鬧大了判帮, 我從來沒見過終極大boss "操作系統(tǒng)" 也來了。

大Boss畢竟是見多識廣溉箕, 他看了一眼晦墙, 哼了一聲 , 很不屑的說:

"又出現(xiàn)死鎖了"

"你們倆要Kill掉一個(gè)肴茄, 來吧晌畅, 過來抽簽 "

這一下子把我給嚇尿了, 這么嚴(yán)重肮烟怠抗楔!

我戰(zhàn)戰(zhàn)兢兢的抽了簽,打開一看拦坠, 是個(gè)"活"字连躏。

唉,小命終于保住了贞滨。

可憐的0x7954 被迫交出了所有的資源以后入热, 很不幸的被kill掉, 消失了晓铆。

我拿到了導(dǎo)演的鎖勺良, 可以開始干活了。

大Boss操作系統(tǒng)如一陣風(fēng)似的消失了骄噪, 身后只傳來他的聲音:

記住尚困, 我們這里導(dǎo)演>演員, ?無論認(rèn)識情況都要先獲得導(dǎo)演的鎖

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

我回到線程池呵萨, 大家都知道了我的歷險(xiǎn), 圍著我問個(gè)不停跨跨。

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

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

"多個(gè)資源加鎖要牢記耕渴, 一定要按Boss的算法比大小拘悦, 然后從最大的開始加鎖"

--------------------------------------------------------

又過了很多天, 我和其他線程們發(fā)現(xiàn)了一個(gè)奇怪的事情:包裹的處理越來越簡單

不管任何包裹橱脸,不管是登錄础米, 瀏覽,存錢..... 處理的步驟都是一樣的, 返回一個(gè)固定的html頁面

有一次我偷偷的看了一眼添诉, 上面寫著:

"本系統(tǒng)將于今晚 00:00 至4:00 進(jìn)行維護(hù)升級屁桑, 給你帶來的不便我們深感抱歉"

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

"唉, 我們的生命也到頭了栏赴, 看來馬上就要重啟系統(tǒng)蘑斧, 我們就要消失了, 再見吧兄弟须眷。"

系統(tǒng)重啟的那一刻終于到來了竖瘾。

我看到屋子里的東西一個(gè)個(gè)的不見了, 等待車間花颗,就緒車間捕传,甚至CPU車間都慢慢的消失了。

我身邊的線程兄弟也越來越少捎稚, 最后只剩我自己了乐横。

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

無人應(yīng)答乔询。

我們這一代線程池完成了使命耘沼。

下一代線程池將很快重生功戚。

(完)

轉(zhuǎn)載地址:http://mp.weixin.qq.com/s?__biz=MjM5NzA1MTcyMA==&mid=403498894&idx=2&sn=219c1a6001b5bb7e6bdc7963b1af8450&scene=2&srcid=0330UDNmQ2GlTOLo1CY8IZfH&from=timeline&isappinstalled=0#wechat_redirect

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丁存,一起剝皮案震驚了整個(gè)濱河市蛾绎,隨后出現(xiàn)的幾起案子群发,更是在濱河造成了極大的恐慌镊屎,老刑警劉巖宰睡,帶你破解...
    沈念sama閱讀 211,496評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒲凶,死亡現(xiàn)場離奇詭異气筋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)旋圆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評論 3 385
  • 文/潘曉璐 我一進(jìn)店門宠默,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灵巧,你說我怎么就攤上這事搀矫。” “怎么了刻肄?”我有些...
    開封第一講書人閱讀 157,091評論 0 348
  • 文/不壞的土叔 我叫張陵瓤球,是天一觀的道長。 經(jīng)常有香客問我敏弃,道長卦羡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,458評論 1 283
  • 正文 為了忘掉前任麦到,我火速辦了婚禮绿饵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘隅要。我一直安慰自己蝴罪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,542評論 6 385
  • 文/花漫 我一把揭開白布步清。 她就那樣靜靜地躺著,像睡著了一般虏肾。 火紅的嫁衣襯著肌膚如雪廓啊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,802評論 1 290
  • 那天封豪,我揣著相機(jī)與錄音谴轮,去河邊找鬼。 笑死吹埠,一個(gè)胖子當(dāng)著我的面吹牛第步,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缘琅,決...
    沈念sama閱讀 38,945評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼粘都,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刷袍?” 一聲冷哼從身側(cè)響起翩隧,我...
    開封第一講書人閱讀 37,709評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呻纹,沒想到半個(gè)月后堆生,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體专缠,經(jīng)...
    沈念sama閱讀 44,158評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,502評論 2 327
  • 正文 我和宋清朗相戀三年淑仆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涝婉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,637評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蔗怠,死狀恐怖嘁圈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蟀淮,我是刑警寧澤最住,帶...
    沈念sama閱讀 34,300評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站怠惶,受9級特大地震影響涨缚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜策治,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,911評論 3 313
  • 文/蒙蒙 一脓魏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧通惫,春花似錦茂翔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至遵湖,卻和暖如春悔政,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背延旧。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評論 1 266
  • 我被黑心中介騙來泰國打工谋国, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人迁沫。 一個(gè)月前我還...
    沈念sama閱讀 46,344評論 2 360
  • 正文 我出身青樓芦瘾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親集畅。 傳聞我的和親對象是個(gè)殘疾皇子近弟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,500評論 2 348

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

  • 我是一個(gè)線程, 我一出生就被編了個(gè)號: 0x3704, 然后被領(lǐng)到一個(gè)昏暗的屋子里牡整, 這里我發(fā)現(xiàn)了很多和我一模...
    天天想念閱讀 317評論 0 0
  • 第一回 初生牛犢 我是一個(gè)線程藐吮,我一出生就被編了個(gè)號:0x3704,然后被領(lǐng)到一個(gè)昏暗的屋子里,在這里我發(fā)現(xiàn)了很多...
    七弦桐語閱讀 481評論 1 3
  • 來自:碼農(nóng)翻身(微信號:coderising)作者:IBM劉欣我是一個(gè)線程谣辞,我一出生就被編了個(gè)號: 0x3704迫摔,...
    執(zhí)著丶執(zhí)念閱讀 992評論 4 15
  • 導(dǎo)論 PHP本身來說是非常快的泥从,但是當(dāng)你發(fā)起遠(yuǎn)程連接句占、加載文件等操作時(shí)也會遇到瓶頸。幸運(yùn)的是躯嫉,有各種各樣的工具可以...
    NoFacePeace閱讀 646評論 0 0
  • CJing閱讀 153評論 0 0