nginx sendfile 參數解釋
sendfile
現在流行的web 伺服器裡面都提供 sendfile 選項來提升伺服器效能,那到底 sendfile是什麼,又怎麼影響效能的呢? sendfile其實是 Linux2.0+以後的推出的一個系統調用,web伺服器可以透過調整自身的配置來決定是否要利用 sendfile這個系統調用。先來看看不用 sendfile的傳統網路傳輸過程:
read(file,tmp_buf, len);
write(socket,tmp_buf, len);
硬碟 >> kernel buffer >> user buffer>> kernel socket buffer >>協定棧
一般來說一個網路應用是透過讀取硬碟數據,然後寫數據到socket 來完成網路傳輸的。上面2行用程式碼解釋了這一點,不過上面2行簡單的程式碼掩蓋了底層的許多操作。來看看底層是怎麼執行上面2行程式碼的:
1.系統呼叫 read()產生一個上下文切換:從 user mode 切換到 kernel mode,然後 DMA 執行拷貝,把文件資料從硬碟讀到一個 kernel buffer 裡。
2、資料從 kernel buffer拷貝到 user buffer,然後系統呼叫 read() 返回,這時又產生一個上下文切換:從kernel mode 切換到 user mode。
3. 系統呼叫write()產生一個上下文切換:從user mode切換到kernel mode,然後把步驟2讀到user buffer的資料拷貝到kernel buffer(資料第2次拷貝到kernel buffer),不過這次是個不同的kernel buffer,這個buffer和socket相關聯。
4、系統呼叫 write()返回,產生一個上下文切換:從 kernel mode 切換到 user mode(第4次切換了),然後 DMA 從 kernel buffer拷貝資料到協定堆疊(第4次拷貝了)。
上面4個步驟有4次上下文切換,有4次拷貝,我們發現如果能減少切換次數和拷貝次數將會有效提升效能。在kernel2.0+ 版本中,系統呼叫 sendfile() 就是用來簡化上面步驟提升效能的。 sendfile() 不只減少切換次數而且還能減少拷貝次數。
再來看看用 sendfile()來進行網路傳輸的過程:
sendfile(socket,file, len);
硬碟 >> kernel buffer (快速拷貝到kernelsocket buffer) >>協定堆疊
1、 系統呼叫sendfile()透過 DMA把硬碟資料拷貝到 kernel buffer,然後資料被 kernel直接拷貝到另外一個與 socket相關的 kernel buffer。這裡沒有 user mode和 kernel mode之間的切換,在 kernel直接完成了從一個 buffer到另一個 buffer的拷貝。
2、DMA 把資料從 kernelbuffer 直接拷貝給協定棧,沒有切換,也不需要資料從 user mode 拷貝到 kernel mode,因為資料就在 kernel 裡。
文章參考:http://www.th7.cn/system/lin/201306/41314.shtml
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });以上就介紹了nginx sendfile 參數解釋,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Kernelsecuritycheckfailure(內核檢查失敗)就是一個比較常見的停止代碼類型,可藍屏錯誤出現不管是什麼原因都讓很多的有用戶們十分的苦惱,下面就讓本站來為用戶們來仔細的介紹一下17種解決方法吧。 kernel_security_check_failure藍色畫面的17種解決方法方法1:移除全部外部裝置當您使用的任何外部裝置與您的Windows版本不相容時,則可能會發生Kernelsecuritycheckfailure藍色畫面錯誤。為此,您需要在嘗試重新啟動電腦之前拔下全部外部裝置。

linux kernel是linux核心的意思,主要起到完成IO驅動設備管理,TCP/IP以及任務調度;linux核心是Linux作業系統的主要組件,也是電腦硬體與其進程之間的核心接口,它負責兩者之間的通信,還要盡可能有效率地管理資源。

在Docker中,掛載目錄的權限問題通常可以透過以下方法解決:使用-v參數指定掛載目錄時新增權限相關的選項。可以透過在掛載的目錄後面新增:ro或:rw來指定掛載目錄的權限,分別表示只讀和讀寫權限。例如:dockerrun-v/host/path:/container/path:roimage_name在Dockerfile中定義USER指令來指定容器中執行的用戶,以確保容器內部的操作符合權限要求。例如:FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

眾所周知在預設參數情況下Linux對高並發支援並不好,主要受限於單一進程最大開啟檔案數限制、核心TCP參數方面和IO事件分配機制等。以下就從幾方面來調整讓Linux系統能夠支援高並發環境。

1.概念使用JavaNIOBuffers與NIOChannel互動。從Channel讀取資料到buffers裡,從Buffer把資料寫入到Channels;必須對Buffer的三個屬性進行控制,也就是capacities能力、position-location、limit限制。 2.實例publicstaticvoidmain(String[]args){//產生一個長度為10的緩衝區IntBufferintBuffer=IntBuffer.allocate(10);for(inti=0;i

去年年底,Linux 系統管理服務 systemd 255 版本被賦予了在全螢幕模式下顯示藍色畫面死機 (BSOD) 樣式錯誤訊息的能力。然而,這個解決方案不適用於核心錯誤,因此即將推出的

基於RedHatEnterpriseLinux7的自由發布來源,CentOS7分支繼承了總是能獲得最新核心安全更新的特性。今天,系統團隊發布了一個非常重要的補丁,對近期發現的4個漏洞進行了及時修復,並推薦用戶盡快安裝補丁,升級至kernel-3.10.0-514.10.2.el7。根據RHSA-2017:0386-1安全公告,這個核心修補修復的漏洞之一是LinuxKernelKVM(Kernel-basedVirtualMachine)部署(CVE-2016-8630),在未定義指令被執行模擬的時

Mode 幣在 OKX 交易所上市,標誌著它進入主流加密貨幣市場的里程碑。幣安執行長趙長鵬對該專案表示看好,為 Mode 幣帶來了信心和信譽。一個活躍而不斷壯大的社區為計畫營造了熱情和參與。 Mode 幣的代幣經濟學獎勵長期持有者和社群貢獻者,而 DeFi 產業的蓬勃發展為其提供了成長的背景。
