2017-02-18 41 views

回答

1

我不確定「高效」是什麼意思,所以我會假設你的意思是大文件流式傳輸,而不是緩衝。

標準http.FileServer最終使用the serveContent function寫入數據,這需要io.ReadSeeker作爲內容(幸運的是,文件就是這樣)。

然後使用io.Copy複製內容,在一般情況下(儘管可能不是您常見的情況,請參閱下文),這意味着copyBuffer。將使用32KB緩衝區。

因此,假設http.ResponseWriter的執行不緩衝其輸入(it doesn't,另請參閱chunked writer),則內存利用率應該是恆定的。

但是當作者支持ReadFrom方法時,io.Copy will use that instead。由於http.responseResponseWriter接口的標準實現)implements the ReadFrom method,它將被用來代替copyBuffer。這個實現反過來會盡可能地嘗試使用系統調用sendfileos.File就是這種情況),這是一個更有效的意義(數據不需要經過進程內存空間,所以差不多當它得到)。

換句話說,我認爲可以說內置的net/http包已經支持高效的大文件流式傳輸。

相關問題