有關web server的IO模型

2021-08-25 09:18:33 字數 1216 閱讀 7992

select 水平觸發 檔案描述符資料有最大限制 1024

poll 與select基本相同 無最大限制

sigio 邊緣觸發

epoll 水平+邊緣 基於事件的就緒通知方式 linux2.6

kqueue 基本於epoll相同 freebsd

水平觸發 通過乙個系統呼叫select()來監視包括多個檔案描述符的陣列,方法返回後,該陣列中就緒的檔案描述符會被核心修改標誌位,從而程序可以獲得這些檔案描述符進行後續的讀寫操作。

邊緣觸發 通過實時訊號,告訴我們哪些檔案描述符是就緒的,並且只說一次,如果沒有採取行動,則不再告知。

lighttpd 預設使用水平觸發 epoll

nginx 預設使用邊緣觸發 epoll

apache select

直接io

o_direct 不通過核心緩衝區

o_sync 通過核心緩衝區但是直接讀寫磁碟 更安全 可將機器故障時資料的丟失減少到最少

sendfile可以直接將磁碟檔案的特定部分直接傳送到socket描述符,加快靜態檔案的請求速度

apache的fork模式 由主程序負責accept()來自客戶端的連線,一旦接收到連線後,馬上fork()乙個新的worker程序處理,處理完成後,此程序銷毀。

prefork() 由主程序預先建立一定數量的子程序,每個請求由乙個子程序來處理,但每個子程序可處理多個請求。 主程序只負責管理子程序

所以,apache的多程序模型的開銷限制了它的併發連線數,但是相對更安全,乙個程序不會影響到另外其它的程序。

worker多路處理模組 由乙個程序中通過多個執行緒處理多個連線,目的是減少prefork模式太多程序的開銷。但其中仍然存在上下文切換的開銷。

apache fork prefork woker程序

lighttpd nginx採用單程序模型

多路io就緒通知的應用

lighttpd和nginx可以支援配置work程序的數量,預設是0,由主程序來進行worker程序的工作,配置後,lighttpd主程序建立兩從此worker程序,主程序不進行連線處理。

lighttpd的配置方式

server.event-handler = "linux-sysepoll"

select/poll會掃瞄所有的檔案描述符,而epoll只關注那些活躍連線,不在死連線上浪費時間。

--------------

兩天就囫圇吞棗地看了這麼點東西 而且還沒記住 唉 悲哀啊

io 有關convertRect問題

pragma mark lynewhomeviewmodeldelegate 在 item.superview convertrect item.frame toview self.view.window 時 如果獲取的座標不正確,那就應該檢視是否布局還沒有完成,上面的 因為要獲取的是filterh...

sql server 2008有關SQL的模糊查詢

執行 資料庫查詢時,有完整查詢和模糊查詢之分。一般模糊語句如下 select 字段 from 表 where 某欄位 like 條件 其中關於條件,sql提供了四種匹配模式 1,表示任意0個或多個字元。可匹配任意型別和長度的字元,有些情況下若是中文,請運用兩個百分號 表示。比如 select fro...

web server 考慮的問題

高併發web伺服器處理 一 html靜態化 效率最高 消耗最小的就是純靜態化的html頁面,所以我們盡可能使我們的 上的頁面採用靜態頁面來實現,如使用資訊發布系統cms 二.伺服器分離 對於web伺服器來說,不管是apache iis還是其他容器,是最消耗資源的,於是我們有必要將與頁面進行分離,在處...