完成連線埠

完成連線埠是一個可以把完成連線埠看成系統維護的一個佇列,作業系統把重疊IO操作完成的事件通知放到該佇列里,由於是暴露 “操作完成”的事件通知。

基本介紹

  • 中文名:完成連線埠
  • 類型:IT名詞
簡介,重疊I/O,完成連線埠,

簡介

Windows的設計目的是一個安全的、健壯的作業系統,能夠運行各種各樣的應用程式來為成千上萬的用戶服務。在處理大量用戶並發請求時,如果採用一個用戶一個執行緒的方式那將造成CPU在這成千上萬的執行緒間進行切換,後果是不可想像的。而IOCP完成連線埠模型則完全不會如此處理,它的理論是並行的執行緒數量必須有一個上限-也就是說同時發出500個客戶請求,不應該允許出現500個可運行的執行緒。目前來說,IOCP完成連線埠是Windows下性能最好的I/O模型,同時它也是最複雜的核心對象。它避免了大量用戶並發時原有模型採用的方式,極大的提高了程式的並行處理能力。
雖然說IOCP完成連線埠套用的範圍在於與IO相關的各種場合,但是就目前來看,IOCP完成連線埠主要用於網路通信方面。例如:大型MMO遊戲(目前大型的MMO遊戲都採用了IOCP完成連線埠)、大型IM(即時通訊、實時傳訊)系統、 網咖管理系統、企業管理系統等等具有大量並發用戶請求的場合。穩定、高效的IOCP完成連線埠通信模型幾乎成為開發這類系統的基礎。
完成連線埠的模型完成連線埠的模型

重疊I/O

首先來看看重疊I/O(Overlapped I/O):
重疊I/O(Overlapped I/O)機制允許發起一個操作,然後在操作完成之後接受到信息。對於那種需要很長時間才能完成的操作來說,重疊IO機制尤其有用,因為發起重疊操作的執行緒在重疊請求發出後就可以自由的做別的事情了。
在WinNT和Win2000上,提供的真正的可擴展的I/O模型就是使用完成連線埠(Completion Port)的重疊I/O。

完成連線埠

接下來看看完成連線埠(Completion Ports )
其實可以把完成連線埠看成系統維護的一個佇列,作業系統把重疊IO操作完成的事件通知放到該佇列里,由於是暴露 “操作完成”的事件通知,所以命名為“完成連線埠”(Completion Ports)。一個socket被創建後,可以在任何時刻和一個完成連線埠聯繫起來。
一般來說,一個應用程式可以創建多個工作執行緒來處理完成連線埠上的通知事件。工作執行緒的數量依賴於程式的具體需要。但是在理想的情況下,應該對應一個CPU創建一個執行緒。因為在完成連線埠理想模型中,每個執行緒都可以從系統獲得一個“原子”性的時間片,輪番運行並檢查完成連線埠,執行緒的切換是額外的開銷。在實際開發的時候,還要考慮這些執行緒是否牽涉到其他堵塞操作的情況。如果某執行緒進行堵塞操作,系統則將其掛起,讓別的執行緒獲得運行時間。因此,如果有這樣的情況,可以多創建幾個執行緒來儘量利用時間。
完成連線埠完成連線埠
總之,開發一個可擴展的Winsock伺服器並非十分困難的。主要是開始一個監聽socket,接收連線,並且進行重疊傳送和接收的IO操作。最大的挑戰就是管理系統資源,限制重疊Io的數量,避免記憶體危機。遵循這幾個原則,就能幫助你開發高性能,可擴展的服務程式。
socket的接收緩衝,因為接收事件僅僅在AcceptEx調用中發生。保證每個socket都有一個接收緩衝不會造成什麼危害。一旦客戶端/伺服器在最初的一次請求(由AcceptEx完成)之後進行互動,傳送更多的數據,那么取消接收緩衝更是一個很不好的做法。除非你能保證這些數據都是在每個連線的重疊IO接收里完成的 。

相關詞條

熱門詞條

聯絡我們