企業級軟體早已從單機轉向 C/S 架構,Socket 通信是核心。本文梳理網絡模型演進路徑:同步阻塞 → 線程/進程池 → Reactor → Proactor,對比 Windows IOCP 與 Linux epoll 實現差異,最終推薦 Boost.Asio 統一跨平台 Proactor 方案。
必讀經典:《TCP/IP 詳解 卷一:協議》(Richard Stevens)奠定協議理論;《UNIX 網絡編程 卷一:套接字 API》(UNP1)是實戰聖經,掌握它等於掌握網絡編程核心。
一個進程循環處理所有連接。缺點:串行處理,單一阻塞導致全系統停擺,響應極差。
每連接創建線程或進程。缺點:上下文切換開銷大,系統資源上限限制併發規模(通常幾千即達頂)。
固定線程池處理連接,其余排隊。缺點:CPU 核心數固定,真正並行度受限,I/O 等待仍浪費線程資源。
專門線程接收連接、維護會話,邏輯線程處理業務。缺點:仍需輪詢檢測數據就緒,效率低。
將網絡事件(連接、讀寫、錯誤)註冊到事件多路分發器,就緒時回調處理。單線程即可支撐高併發。
epoll、select)Proactor 零拷貝優勢明顯,但 Linux 缺乏成熟 AIO 支援。
Boost.Asio 封裝了 Windows IOCP 與 Linux epoll+任務隊列模擬 Proactor,提供統一 Proactor API。計劃將現有 Linux Reactor 庫遷移至 Boost.Asio,統一代碼庫,降低維護成本。
本文出自「永遠的朋友」博客,轉載請保留出處:原文鏈接