## Proactor模型
在 Reactor 模式中,Reactor 等待某個事件或者可應用或者操作的狀態發生(比如文件描述符可讀寫,或者是 Socket 可讀寫)。
然后把這個事件傳給事先注冊的 Handler(事件處理函數或者回調函數),由后者來做實際的讀寫操作。
其中的讀寫操作都需要應用程序同步操作,所以 Reactor 是非阻塞同步網絡模型。
如果把 I/O 操作改為異步,即交給操作系統來完成就能進一步提升性能,這就是異步網絡模型 Proactor

Proactor 是和異步 I/O 相關的,詳細方案如下:
1)Proactor Initiator 創建 Proactor 和 Handler 對象,并將 Proactor 和 Handler 都通過 AsyOptProcessor(Asynchronous Operation Processor)注冊到內核;
2)AsyOptProcessor 處理注冊請求,并處理 I/O 操作;
3)AsyOptProcessor 完成 I/O 操作后通知 Proactor;
4)Proactor 根據不同的事件類型回調不同的 Handler 進行業務處理;
5)Handler 完成業務處理
### Proactor和Reactor的區別
1)Reactor 是在事件發生時就通知事先注冊的事件(讀寫在應用程序線程中處理完成);
2)Proactor 是在事件發生時基于異步 I/O 完成讀寫操作(由內核完成),待 I/O 操作完成后才回調應用程序的處理器來進行業務處理。
理論上 Proactor 比 Reactor 效率更高,異步 I/O 更加充分發揮 DMA(Direct Memory Access,直接內存存取)的優勢。
但是Proactor有如下缺點:
1)編程復雜性,由于異步操作流程的事件的初始化和事件完成在時間和空間上都是相互分離的,因此開發異步應用程序更加復雜。應用程序還可能因為反向的流控而變得更加難以 Debug;
2)內存使用,緩沖區在讀或寫操作的時間段內必須保持住,可能造成持續的不確定性,并且每個并發操作都要求有獨立的緩存,相比 Reactor 模式,在 Socket 已經準備好讀或寫前,是不要求開辟緩存的;
3)操作系統支持,Windows 下通過 IOCP 實現了真正的異步 I/O,而在 Linux 系統下,Linux 2.6 才引入,目前異步 I/O 還不完善。
因此在 Linux下實現高并發網絡編程都是以 Reactor 模型為主
- 概述
- 網絡時延
- 進程間通信
- URI
- URL
- URN
- NAT
- 操作系統基礎
- 內核
- 用戶空間
- 網絡協議模型
- 四層網絡協議模型
- 鏈路層
- 以太網協議
- ARP協議
- RARP協議
- MAC地址
- 網絡層
- IP協議
- ICMP協議
- 子網掩碼
- 傳輸層
- TCP協議
- TCP慢啟動
- TCP性能
- UDP協議
- SCTP協議
- 應用層
- DNS
- TCP/IP協議族
- Socket
- Socket通信模型
- socket和TCP/IP協議族
- Socket三次握手四次揮手
- OSI七層模型
- 物理層
- 數據鏈路層
- 網絡層
- 傳輸層
- 應用層
- HTTP
- 基礎
- HTTP/1.0
- HTTP/1.1
- http2.0
- HTTP報文
- WEB瀏覽器工作機制
- HTTP事務時延
- HTTP與HTTPS區別
- 持久連接
- 用戶驗證
- web結構組件
- 代理
- 正向代理
- 反向代理
- 緩存
- 網關
- 隧道-tunnel
- Agent代理
- http協議補充
- Servlet3異步請求
- ajax
- Comet
- WebSocket
- SPDY協議
- HTTP/2
- QUIC
- WebDAV
- http方法
- http連接
- 短連接&長連接
- 管線化
- 網絡會話
- cookie
- session
- token
- jwt
- cookie與session的區別
- Spring Session
- 分布式session實現方案
- 同源策略
- 跨域
- CORS
- HTTP三大安全問題
- JWT vs OAuth
- HTTPS
- SSL&TLS
- OpenSSL
- HTTPS和TLS/SSL的關系
- X509標準和PKI
- IO模型
- IO
- I/O模型
- 傳統阻塞式I/O
- 非阻塞式I/O
- IO復用
- Connection Per Thread模式
- IO多路復用模型流程
- Reactor模式
- 單Reactor單線程
- 單Reactor多線程
- 主從Reactor多線程
- Proactor模型
- Selector模型
- 信號驅動I/O
- 異步I/O
- select/poll/epoll
- select
- poll
- epoll
- select/poll/epoll適用場景
- 零拷貝原理
- 讀取文件發送網絡內存拷貝
- 零拷貝
- Netty零拷貝
- 密碼學
- 密碼學Hash算法分類
- 加密算法
- 對稱加密
- 非對稱加密
- 數字簽名
- RSA數字簽名算法
- DSA數字簽名算法
- 數字證書
- MAC算法
- web安全
- CSRF攻擊
- XSS
- cookie劫持
- SQL注入
- DDos攻擊
- 常見面試題
- 瀏覽器工作機制和原理
- XSS如何預防
- 如何防止cookie被劫持
- 附錄
- HTTP狀態碼
- 常用的網絡端口