比方說,你在塊通過TCP/IP傳輸任意長度的文件:使用send()時是否存在「最佳」緩衝區大小?
looping...
read(buffer, LENGTH)
send(mysocket, buffer, LENGTH, flags)
我的問題是,什麼是長度的最佳值?或者根本不重要?我已經看到從256字節到8192字節被使用的一切。
比方說,你在塊通過TCP/IP傳輸任意長度的文件:使用send()時是否存在「最佳」緩衝區大小?
looping...
read(buffer, LENGTH)
send(mysocket, buffer, LENGTH, flags)
我的問題是,什麼是長度的最佳值?或者根本不重要?我已經看到從256字節到8192字節被使用的一切。
取決於您最佳的意思。爲了優化帶寬使用,您希望最大化數據包大小,以便至少發送網絡數據包大小(在以太網上通常大約爲1500字節)。如果您從磁盤讀取4096或8192字節將是一個很好的價值。
大小通常選擇爲系統頁面大小的倍數以優化內存處理。 http://en.wikipedia.org/wiki/Page_(computer_memory) –
如果你的緩衝區的大小轉換成數據包的大小,再短一點緩衝更好 - 少一個數據包錯誤的情況下重發。
ATM告到了極致與54字節的數據包。
但是這取決於你的圖書館,它可能會做一些自身的緩衝和independantly設置它的數據包大小。因人而異。
還有一些固定大小的東西附加到每個數據包上,所以使數據包的大小減少了實際數據使用的帶寬量。 –
如果是在高延遲連接發送大量數據,你可以得到更好的吞吐量有較大的發送緩衝區。這裏是一個很好的解釋: http://www.onlamp.com/pub/a/onlamp/2005/11/17/tcp_tuning.html
注意,這個循環已經不正確。提供給send()調用的長度應該是read()調用返回的長度。你不能假設它填滿了緩衝區。 – EJP