UNPv1第二十二章 訊號驅動IO

2021-07-11 10:55:29 字數 772 閱讀 2504

訊號驅動是指程序預先告知核心,使得當某個描述符上發生某事時,核心使用訊號通知相關程序。需要注意的是這裡描述的訊號驅動不是真正的非同步i/o。

注意第16章描述的非阻塞i/o同樣不是非同步i/o。對於非阻塞i/o,核心一旦啟動,i/o操作就不像非同步i/o那樣立即返回到程序,而是等到i/o操作完成或遇到錯誤;核心立即返回的唯一條件是i/o操作的完成不得不把程序投入睡眠,這種情況下核心不啟動i/o操作。

針對乙個套接字使用訊號驅動i/o(sigio) 要求程序執行以下三個步驟:

給sigio訊號建立訊號處理程式

設定套介面屬主,通常使用fcntl的f_setown命令

啟用套介面的訊號驅動i/o,通常使用fcntl的f_setfl命令開啟o_async標誌

udp上使用訊號驅動i/o是簡單的。當下述事件發生時產生sigio訊號:

資料報到達套接字

套介面上發生非同步錯誤

因此當捕獲到sigio訊號時,呼叫recvfrom讀入到達的資料報或者獲取發生的非同步錯誤。

不幸的是,訊號驅動i/o對tcp套接字幾乎是沒用的,問題在於是該訊號產生得過於頻繁,並且該訊號的出現並沒有告訴我們發生了什麼事情。

下列條件均可在tcp套介面上產生sigio訊號(假設訊號驅動i/o是使能的):

在監聽套介面上有乙個連線請求已經完成

發起了乙個連線拆除請求

乙個連線拆除請求已經完成

乙個連線的一半已經關閉

資料到達了套接字

資料已從套接字上發出(即輸出緩衝區有空閒時間)

發生了乙個非同步錯誤

第二十二章 Teamware需求

teamware正如他的名字一樣,是乙個團隊使用的groupware。groupware的定義是 teamware的功能需求 公共功能 使用者管理 角色管理 客戶管理 crm 專案管理 安全 授權和認證 業務功能 公告欄 notice 位址本 address book todo列表 todo lis...

第二十二章 橋接模式

很多情況下用繼承會帶來麻煩。比如,物件的繼承關係是在編譯時就定義好了的,所以無法在執行時改變從父類繼承的實現。子類的實現與它的父類有非常緊密的依賴關係,以至於父類實現中的任何變化必然會導致子類發生變化。當你需要復用子類時,如果繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。這...

第二十二章 DOM 元素尺寸和位置

學習要點 1.獲取元素 css 大小 2.獲取元素實際大小 3.獲取元素周邊大小 本章,我們主要討論一下頁面中的某乙個元素它的各種大小和各種位置的計算方式,以便更好的理解。一 獲取元素 css 大小 1.通過 style 內聯獲取元素的大小 var box document.getelementby...