第33章 面試人才(3)
「C/S架構系統應用過程中,會發生一個服務端程序服務眾多客戶端,用什麼技術手段,提前解決服務阻塞問題的發生?」
曹志軍意外地看著李洛,他不是在思考問題的答案,而是在驚訝他對『編程』知識的認知程度,眼前這位十八九歲的小老闆,根本就是個技術大佬,不然,怎麼能知道著這種直達問題核心的技術難題。
「曹先生,你這麼看著我做什麼,這個問題應該不難吧!」李洛笑吟吟地看著直愣愣的曹志軍,笑著問。
「這個問題不難解決,在伺服器編程中有不少解決的方法,比:如多線程、多進程、復用IO,……等等。」曹志軍緩過神來,擺正態度看著李洛,回答道。
「很好,那你能不說一說多線程怎麼解決?在服務端和read都有阻塞程序!」李洛滿意地一笑,接著問。
「嗯,解決思路是這樣的,服務端同時處理多個客戶端請求時,需要處理的情況有很多種,比如,新客戶端等待與服務端建立連接,已連接客戶端發送數據,已連接客戶端斷開連接等等情況,……,如果伺服器採用輪詢阻塞的方式運行,那麼同一時刻只能處理一種情況,這時其他情況發生就要等待阻塞結束,……,可以通過鎖,線程間通信,多個線程間同步等手段,實現分別處理工作,……。」曹志軍思考了片刻,詳細介紹道。
「這個模式可以解決,不過,用這種方式監聽多個客戶端,需要程序在用戶態和內核態之間來回切換,浪費系統資源不說,客戶端的請求也得不到及時的響應,當客戶端數量增大時,查詢效率直線下降,……,這個問題怎麼解決?」李洛笑著點頭,續集拋出一個問題。
認真聽完李洛的提問,曹志軍神情嚴峻,認真思考起來,再次感到對方的狠辣。
曹志軍思考了十來分鐘,不確定地回答:「使用多路復用技術,讓內核阻塞監聽每個客戶端是否可讀,……,達到減免用戶態和內核態之間來回切換!」
李洛點了點頭,贊同道:「不錯的思路,不過,如果加入select的使用,你覺得怎麼樣,將服務端自身的socket也加入到select的監聽列表中,當有新連接到達時,select會返回當前服務端socket處於活動狀態,這時處理新連接即可,能避免多線程的擠壓使用……,」
聞言,曹志軍眼前一亮,忍不住讚歎道:「這個辦法好,……。」
李洛微微一笑,看著興奮的曹志軍,再次拋出一個問題:「在系統使用過程中,server端會出現大量的假死連接,這個問題你是怎麼解決的?」
曹志軍眉頭一皺認真思考起來,假死鏈接這個問題不常見,但是不能說沒有/
c端可以斷線重連s端,但是上一次的連接狀態依然被s認為有效,並且得不到正確釋放,……,具體造成的原因可以參考tcp/ip斷開連接fin過程,如果覺得這種事發生的概率微不足道,不做任何處理,程序長時間運行后,會面臨大量假死連接得不到正常釋放,然後伺服器越來越慢,IO處理效率越來越低。
這個問題怎麼解決呢?
曹志軍不由自主地陷入思考,抓著腦門,被這個問題難住了。
李洛笑呵呵地看著曹志軍,有點喜歡他較真的性格,幾次提問,已經能判斷出曹志軍的性格,而是不他的能力。
能力這種東西,
後期通過努力的學習,都能獲得提升,問題是個人的性格,能不能用心學習新技術,是否值得培養才是要不要招他的關鍵,曹志軍目前為止的表現,還算合格。
「假死鏈接可以用兩種方式解決,第一種,對連接上的套接字做保活處理,即設置keeplive,此後如果在規定時間內無數據傳輸,那麼tcp協議棧會自動發送keeplive探測包,以維護當前連接有效性。」李洛笑著提醒,接著又道:「不過,這種解決方法有缺陷,會出現一些不可控的情況。」
「沒錯,如果在S端這樣設置,c端會意外斷電、網路會異常終止、或者被第三方軟體或防火牆幹掉。」曹志軍眼睛一亮,補充道。
停頓了一下,曹志軍迫切地看著李洛,關心地問:「第二種呢!」
「第二種,在c端定時發送用戶層心跳包,s端針對每個已連接套接字記錄最後一次收到心跳包的時間,同時開啟線程定時檢測:超過XX秒還未收到心跳包的套接字,kill掉,釋放佔用的上下文及收發緩衝區資源,……。」李洛笑著介紹。
「對啊!可以用這個方法,我怎麼沒想到!」曹志軍恍然大悟,懊惱地說。
「可能這個問題比較偏,你一時沒想到,我問個常見的吧!」李洛呵呵一笑,接著道。
「好!」曹志軍興奮地點頭。
……
很快,李洛和曹志軍,一個提問,一個回答,有時候,曹志軍回答不出來的時候,李洛還會提個醒,原本一場面試的畫風,驟然變成了一場學術交流會。
辦公室里,還有第三人-陳曉雯,她就站在一旁,眼睜睜地看著,驚訝於李洛能跟曹志軍聊的這麼嗨,原本,她還擔憂李洛壓不住場子,要留下來幫忙的,那知會看到這副局面。
李總在IT知識領域,完全吊打曹志軍啊!
陳曉雯雙目放光,看著李洛就好像發現一個寶藏,藏著巨大的秘密。
然而,兩個IT男興緻勃勃地討論著技術問題,眼裡沒有陳曉雯的存在。
見他們兩技術話題一個接著一個,一時半刻聊不完的樣子,陳曉雯聽不懂他們在說什麼,默默退出辦公室,順手將玻璃門帶上。
「曉雯姐,關門幹嘛,我哥在裡面有事忙嗎?」陳曉雯剛把門關上,就見李曉芬興沖沖朝跑來,臉上笑容燦爛,好像發生了什麼值得開心的喜事。
「嗯!李總在面一個重要職位,一時半會兒,談不下來。」陳曉雯解釋了一下,好奇地看著李曉芬,問:「咋啦!發生了什麼事!讓你這麼開心?」
「嘻!曉雯姐,我偷偷告訴你件事,你不要跟其他同事說哦!」李曉芬開心地點頭,欣喜地將腦袋往陳曉雯身上湊過去。
陳曉雯眼中閃過一絲好奇,附耳傾聽。