window 下的套接字以來兩種方式執行i/o操作,阻塞io 非阻塞io,一般預設使用的是阻塞io 即執行緒會等待不會把控制權利立刻返回給程式,這就意為乙個執行緒在某乙個時候只能夠去執行乙個io操作。
如果服務端想和多個客戶端同時進行通訊的話就要使用多執行緒程式設計,但是會增加開銷,如果採用非阻塞io程式不會等待,會立刻返回結果但是在大部分情況下返回的結果是錯誤的,並返回乙個wsaewouldblock的錯誤,所以程式設計師要不斷的檢測函式返回的**以判斷乙個套接字何時可供讀寫。
windows作業系統提供了選擇模型、非同步選擇模型、事件選擇模型、重疊i/o模型和完成埠共五種i/o模型。每一種模型均適用於一種特定的應用場景。程式設計人員應綜合考慮到程式的擴充套件性和可移植性等因素,做出自己的選擇。
選擇模型是winsock中最常見的i/o模型。之所以稱其為「select模型」,是由於它的「中心思想」便是利用select函式,實現對i/o的管理!最初設計該模型時,主要面向的是某些使用unix作業系統的計算機,它們採用的是 berkeley套接字方案。select模型已整合到winsock 1.1中,它使那些想避免在套接字呼叫過程中被無辜「鎖定」的應用程式,採取一種有序的方式,同時進行對多個套接字的管理。
使用非同步選擇模型,應用程式可在乙個套接字上,接收以windows訊息為基礎的網路事件通知。具體的做法是在建好乙個套接字後,呼叫wsaasyncselect函式。
wsaeventselect和wsaasyncselect模型類似,它也允許應用程式在乙個或多個套接字上,接收以事件為基礎的網路事件通知。對於wsaasyncselect模型採用的網路事件來說,它們均可原封不動地移植到事件選擇模型上。在用事件選擇模型開發的應用程式中,也能接收和處理所有那些事件。該模型最主要的差別在於網路事件會投遞至乙個事件物件控制代碼,而非投遞至乙個視窗例程。
「完成埠」模型是迄今為止最為複雜的一種i/o模型。然而,假若乙個應用程式同時需要管理為數眾多的套接字,那麼採用這種模型,往往可以達到最佳的系統效能!但不幸的是,該模型只適用於windows nt和windows 2000作業系統。
因其設計的複雜性,只有在你的應用程式需要同時管理數百乃至上千個套接字的時候,而且希望隨著系統內安裝的cpu數量的增多,應用程式的效能也可以線性提公升,才應考慮採用「完成埠」模型。要記住的乙個基本準則是,假如要為windows nt或windows 2000開發高效能的伺服器應用,同時希望為大量套接字i/o請求提供服務(web伺服器便是這方面的典型例子),那麼i/o完成埠模型便是最佳選擇!
windows作業系統
1.檢視埠 netstat ano netstat ano find 2檢視程序 tasklist 3.刪除程序 tskill 4.開啟程序管理器 taskmgr 5.ping 6.ipconfig all 7.f 8 cd cd.9.mkdir rmdir linux rm rf 10.dir 列...
作業系統IO模型
目前io模型主要經歷了以下五種 1 阻塞io 2 非阻塞io 3 io復用 select和poll 4 訊號驅動io sigio 5 非同步io aio 核心空間和使用者空間 由於作業系統都包括核心空間和使用者空間 或者說核心態和使用者態 核心空間主要存放的是核心 和資料,是供系統程序使用的空間。而...
作業系統之IO
io 是指作業系統內部的通訊流,用來提供不同模組的溝通 硬體層面 在硬體層面如何連線不同的模組,這裡採用主從模式,即有乙個mmu管理中心負責與其他硬體連線,然後cpu 記憶體與該mmu管理中心連線,通過這種方式 使得cpu 記憶體與計算機硬體隔離開來,後續的迭代維護不會影響到cpu和記憶體 計算機硬...