什麼是網絡編程?用一句話概括,就是對網絡協議的落地。
落地,意味着對實戰的要求更高。所以,一些朋友更喜歡用類似 Netty 這種封裝好的框架——快速,高效。确實,跟開發細節相比,我們常常更看重開發效率。
可日常的項目裡,我們也不得不面對極端的網絡性能考驗。沒人喜歡堵車,但應對大量請求時,如果網絡性能處理不佳,數據、業務就會面臨大塞車。
舉個正向的例子,之前在綠盟有個信息安全産品,叫黑洞,是當時市場上最成功的 DDOS 過濾設備。這玩意最大的技術難點就在于:當攻擊報文洪水到達時,每秒要過濾掉幾十萬攻擊請求。在那之前,我從沒想過通過程序代碼,對網絡報文的處理效率,竟然能達到如此強悍的地步。
早些年尚且如此,更别提如今的 5G 時代了。用戶大幅度提升的平均網絡傳輸速度,正對我們提出高性能網絡編程的要求:不僅要解決諸如提高吞吐量和并發性等問題,還得處理各種棘手異常,比如保證千萬個連接的正常運行等等。這些,顯然不是一兩個框架就能搞定的。可惜的是,我面試過的不少候選人都沒有意識到這點,哪怕他們已經工作多年,在網絡協議和網絡編程這塊依舊不是很上心,對其的理解也還停留在一個比較淺的層次上,
比如:
• 大家經常說的四層、七層,分别指的是什麼?
• TCP 三次握手是什麼,TIME_WAIT 是怎麼發生的?CLOSE_WAIT 又是什麼狀态?
• Linux 下的 epoll 解決的是什麼問題?如何使用 epoll 寫出高性能的網絡程序?
• 什麼是網絡事件驅動模型?Reactor 模式又是什麼?
其實,無論在面試還是工作中,網絡性能及優化這方面的知識都是非常重要的基本功。在我看來,想做到高性能網絡編程,下面兩個核心要點永遠都繞不開:
第一,在理解網絡協議的基礎上,充分利用操作系統内核提供的能力,感知各種網絡 I/O 事件;第二,學會使用線程處理并發。抓住這兩點,就抓住了高性能網絡編程的“七寸”。
分享給你一張網絡編程的核心知識圖譜,将上述兩個核心會涉及到的知識點都囊括在内,隻要我們仔細梳理、透徹理解這些核心知識點,就能學以緻用地解決工作中的實際問題。
這張圖譜出自盛延敏的《網絡編程實戰》專欄。高性能網絡編程,因為整個都是圍繞「高性能」展開的。
但話又說回來,高性能就建立在那些實打實的經驗基礎上,所以現在這個也算簡潔有力。内容同樣是單刀直入展開,比如在講解某個理論或算法時,與代碼、實驗相關聯,分析它提出的目的、解決了哪些問題。
說白了,就是從解決實際問題的角度切入,講解知識點,讓你透徹理解協議、API 和代碼。學完就能用得上。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!