2011-02-09 44 views
3

比方說,你在塊通過TCP/IP傳輸任意長度的文件:使用send()時是否存在「最佳」緩衝區大小?

looping... 
    read(buffer, LENGTH) 
    send(mysocket, buffer, LENGTH, flags) 

我的問題是,什麼是長度的最佳值?或者根本不重要?我已經看到從256字節到8192字節被使用的一切。

+0

注意,這個循環已經不正確。提供給send()調用的長度應該是read()調用返回的長度。你不能假設它填滿了緩衝區。 – EJP

回答

2

取決於您最佳的意思。爲了優化帶寬使用,您希望最大化數據包大小,以便至少發送網絡數據包大小(在以太網上通常大約爲1500字節)。如果您從磁盤讀取4096或8192字節將是一個很好的價值。

+0

大小通常選擇爲系統頁面大小的倍數以優化內存處理。 http://en.wikipedia.org/wiki/Page_(computer_memory) –

0

如果你的緩衝區的大小轉換成數據包的大小,再短一點緩衝更好 - 少一個數據包錯誤的情況下重發。

ATM告到了極致與54字節的數據包。

但是這取決於你的圖書館,它可能會做一些自身的緩衝和independantly設置它的數據包大小。因人而異。

+0

還有一些固定大小的東西附加到每個數據包上,所以使數據包的大小減少了實際數據使用的帶寬量。 –