上篇文章中畏纲,分析了幾種任務(wù)處理模型:單線程阻塞 IO、多線程非阻塞 IO 和單線程非阻塞 IO 的性能盈厘,并畫出了簡單的流程圖睁枕。
同時,為了簡化理解沸手,在場景模擬中給出了一個限定條件:請求分析外遇、IO 讀取和響應(yīng)處理的耗時各位 1ms,那這個設(shè)定是不是合理的呢契吉?
上圖展示了不同的 IO 操作所占用的 CPU 時鐘周期跳仿,在計算機中,CPU 的運算速度最快捐晶,以其的運算速度為基準菲语,時鐘周期為1妄辩。其次是一級緩存、二級緩存和內(nèi)存,硬盤和網(wǎng)絡(luò)最慢,它們所花費的時鐘周期和內(nèi)存所花費的時鐘周期差距在五位數(shù)以上薄料,更不用提跟 CPU 和一級緩存、二級緩存的差距了踏揣。
注:CPU 時鐘周期的計算公式為:
CPU 時鐘周期 = 1s / CPU 主頻
因此,我們在場景模擬中的限定是有問題的:CPU 運算的時間其實遠遠小于數(shù)據(jù)庫 IO 讀寫的時間,正確的流程圖應(yīng)該像這樣:
如果采用阻塞式的 IO,CPU 將空閑相當長的時間等待 IO 操作完成楞黄,性能浪費嚴重。在這個模型下寄摆,如果進行 IO 操作 A 花費是時間為 M谅辣,進行 IO 操作 B 花費的時間為 N,那么在 IO 上花費的時間就為 (M + N + ...)婶恼。可見柏副,同步式(阻塞式)IO 的代價是十分昂貴的勾邦。
分布式 IO
前面說到,阻塞式 IO 的代價是昂貴的割择,對于分布式架構(gòu)而言眷篇,阻塞式 IO 的代價更加昂貴,先看下面兩個流程圖:
當網(wǎng)站越來越大荔泳,我們就會引入靜態(tài)資源 CDN蕉饼、服務(wù)器集群和數(shù)據(jù)庫集群,這就構(gòu)成了一分布式的 IO玛歌,相比于將所有的資源放在一臺服務(wù)器上昧港,分布式 IO 增加了一層網(wǎng)絡(luò)請求和磁盤讀寫(可以從花費 CPU 時鐘周期的角度看),這種情況下如果還采用阻塞式 IO支子,其代價將會大的讓別的男人傷心创肥。
異步 IO 的好處
對于異步 IO 來說,情況就好得多值朋,還是以上面 A 和 B 兩個 IO 操作為例叹侄,如果采用異步 IO,那么在 IO 操作上的耗時就為 MAX(M昨登,N趾代,...),相比于阻塞式 IO丰辣,其代價簡直小的讓別的男人開心撒强。
在并發(fā)量較小的情況下禽捆,阻塞式 IO 和異步 IO 的差距可能不是那么明顯,但隨著并發(fā)量的增加尿褪,異步 IO 的優(yōu)勢將會越來越大睦擂,吞吐率和性能上的差距也會越來越明顯。
完杖玲。