以前覺得飛鴿傳輸?shù)乃俣仍?00Mbps 網(wǎng)卡上能夠跑7 8M/s的樣子感覺很神奇,看了一下源代碼貌似沒有發(fā)現(xiàn)很大特別地方,只是覺得那個日本人寫的代碼比較正規(guī),學(xué)生很少看見漂亮代碼,只會寫垃圾代碼。
以前寫過傳送文件代碼,發(fā)現(xiàn)速度只有飛鴿傳送一般的速度并且貌似傳送的速度還不穩(wěn)定。想好了好久沒有想明白,后來想貌似網(wǎng)上好多說什么多線程下載,p2p下載。我就想弄個多線程就OK就應(yīng)該可以提高速度。后面經(jīng)過自己測試發(fā)現(xiàn)這個不是很對,在某種程度上速度稍微有一點點提高。后來,知道網(wǎng)卡是數(shù)據(jù)傳送不是并行,所以多線程根本不解決本質(zhì)。(為什么多線程下載可以提高下載速度,你是不是看到過一些瀏覽器的下載管理器 下載一個文件時候都開啟幾個線程,顯然他們開啟多線程是為提高下載速度。。。想知道原理請看下面分解)。
我想了好久,想到IP協(xié)議是以最大速度傳送數(shù)據(jù),那么TCP 和 UDP 都是在IP基礎(chǔ)上出來,顯然他們也基礎(chǔ)IP這個特性,所以可見SOCKET 沒有提高網(wǎng)卡傳送的方法,這就說明速度是一個定值。
我們所說網(wǎng)速其實就是 每秒網(wǎng)卡進過數(shù)據(jù)流量。
這里我就要舉一個例子,否則越說越糊涂了。
一個可以裝20噸的貨車裝滿了沙子,一個可以裝10噸的小貨車裝滿了沙子。 但他們最大速度都相同,他們都以最大速度在2條一樣的條路上行駛,并且都要經(jīng)過個完全一樣收費站。
貨車長度是一樣。
汽車速度就是我們網(wǎng)卡物理最大速度100Mbps == 貨車的速度
以為長度一樣 速度一樣 我們假設(shè)經(jīng)過的時間為1s
收費站速度(以沙子為對象) :大貨車的:20噸/s 小貨車:10噸/s ====== 我們所說的網(wǎng)速
說到這里我也明白,我以前學(xué)習(xí)網(wǎng)絡(luò)課程不明白的地方,以前網(wǎng)卡最大速度 和 網(wǎng)速 為什么不是一樣。
網(wǎng)卡100Mbps : 類似如 一個汽車 一秒 可以跑 多少米
我們所說網(wǎng)速:類似 收費站 一秒 經(jīng)過的沙子量
這個2個是不同概念。
這就好像 長度 和 面積差別。。看來以前學(xué)習(xí)數(shù)學(xué)還是有一點用的。
所以這里就可說: 貨車裝載量就是套接字(字節(jié)流)緩存區(qū)大小。我們只要增加緩沖區(qū)大小就可以提高我們傳送文件的速度。
經(jīng)過測試確實驗證這個說話,測試結(jié)果就不貼出來了。
后面看steven 的tcp/ip詳解 里面也寫了一段話,也說明這個觀點。
插口A P I允許進程設(shè)置發(fā)送和接收緩存的大小。接收緩存的大小是該連接上所能
夠通告的最大窗口大小。有一些應(yīng)用程序通過修改插口緩存大小來增加性能。
[Mogul 1993]顯示了在改變發(fā)送和接收緩存大小(在單向數(shù)據(jù)流的應(yīng)用中,如文件傳輸,
只需改變發(fā)送方的發(fā)送緩存和接收方的接收緩存大小)的情況下,位于以太網(wǎng)上的兩個工作
站之間進行文件傳輸時的一些結(jié)果。它表明對以太網(wǎng)而言,默認的 4 0 9 6字節(jié)并不是最理想的
大小,將兩個緩存增加到 1 6 3 8 4個字節(jié)可以增加約 4 0 %左右的吞吐量。在 [ P a p a d o p o u l
o s和Parulkar 1993]中也有相似的結(jié)果。
他這里插口API 就是套接字(我就單純認為套接字)
windows 緩存區(qū)默認大小是8k。
為什么多線程可以稍微提高網(wǎng)絡(luò)速度?
其實我們想想 一張網(wǎng)卡只要不停跑滿流量就可以達到最高速度。多線程就是使緩存區(qū)數(shù)據(jù)保持被填滿,但這里只是稍微提高。其實單線程就足夠做到這點,
我們 send 傳入一個Buf 參數(shù)時候 只要這個Buf一個合適的值,就足夠使網(wǎng)卡保持繁忙。
這里就好像怎么是cpu 效率最高就是不要cpu停下來,同理怎么是網(wǎng)卡效率最高,也就是不要它停下來。
為什么多線程下載可以提高網(wǎng)速?
我們知道帶寬速度比起網(wǎng)卡速度那完全是皮毛,說實在網(wǎng)卡I/O設(shè)備是中斷讀取數(shù)據(jù),它讀取數(shù)據(jù)也不能并行讀取(不知道這么說對不對),所以多線程不是使網(wǎng)卡并行讀取數(shù)據(jù),而是增加服務(wù)器對你服務(wù)器時間(因為你使用多線程),自然傳送速度會快些。
p2p 我認為無非也是增加服務(wù)器對你服務(wù)器時間(這里不是指特定服務(wù)器,而是能夠給你傳送數(shù)據(jù)我就叫著服務(wù)器,貌似p2p叫對等方)。(我沒有寫過p2p,只是通過一些書籍介紹,憑自己感覺思考的)。因為網(wǎng)卡的讀取速度比起帶寬要快很多,所以p2p 在很大范圍來說 給你上傳數(shù)據(jù)的對等方越多你的速度越快,但超過一定的值,其實就不可能提高了。
上面都是本人通過以有知識推測,有些經(jīng)過驗證,有些沒有進過驗證。如果有錯誤,那就錯了吧!!
注:錯別字不算錯誤。。。。。。
posted on 2013-05-15 23:00
小魚兒 閱讀(5115)
評論(5) 編輯 收藏 引用