ASIO 之 剖 析--(1) 初识 ASIO
来源:互联网 发布:php curl culopt 编辑:程序博客网 时间:2024/06/05 19:34
-1: 我预先需要知道哪些知识?
1)socket 通讯的基本知识:如tcp/ip基本原理,socket编程的基本知识,blocking/noblocking。
2) 关于select/poll/epoll模型的相关基础知识,知道其基本工作原理。
3) IOCP(IO Completion Port)完成端口的基本知识,见附录2。
4) Reactor模式。见附录1。
0:Proactor模式( 描述如下:详细图见google)
其中各个角色的职责及功能如下:
1:Asynchronous Operation
其主要执行相关的异步操作,例如:通过socket进行异步读写。
2:AsynchronousOperation Processor
当操作完成后,执行异步操作以及相关完成队列上完成事件的相关操作。从高层用户的角度来看,stream_socket_service就是一个 Asynchronous Operation Processor。更加具体的就是使用win_iocp_io_service或task_io_service来完成相应操作完成事件的入队列。在后面的文章中我们将会讨论这两个相关的类。
3:CompletionEvent Queue
完成事件队列,保存完成事件,直到由异步事件多路复用器从事件队列中取出并将其派发。
4:CompletionHandler
由函数对象来处理异步操作的结果。在boost中由boost::bind来完成相关事件与处理函数句柄的绑定。在指定的事件发生后,系统将调用其所注册的句柄来对其进行服务。
5:AsynchronousEvent Demultiplexer
异步事件的多路复用器,阻塞并等待事件发生,并将该完成事件返回其调用者。
6:Proactor
调用异步事件多路复用器,从事件队列中取出事件,并将带有完成事件的完成句柄派发出。在BOOST中由io_service来描述该概念。
7:Initiator
位于应用层,其发起一个异步操作。Initiator通过高层接口,例如:basic_stream_socket,与Asynchronous Operation Processor 交互,其完成类似stream_socket_service之类的用户行为服务。一个Proactor模式的相关sample code如附录3所示。BOOST::ASIO在具体的实现中对于异步IO 在不同的平台下其具体实现方式有所不同:在非Windows平台下,其采用Reactor模式来实现。例如:在Linux/FreeBSD Unix/Mac OS平台下所采用的select/epoll/kqueue;而在Windows平台下,则采用Overlapped IO来实现。
两种模式(Reactor与Proactor)之间对比关系如下:
l Reactor模式
n 某个事件处理者宣称它对某个socket上的读/写事件很感兴趣;
n 事件分离者等着这个事件的发生;
n 当事件发生了,事件分离器被唤醒,这负责通知先前那个事件处理者;
n 事件处理者收到消息,于是去那个socket上读/写数据。如果需要,它再次宣称对这个socket上的读/写事件感兴趣,一直重复上面的步骤;
l Proactor模式
n 事件处理者直接投递发一个读/写操作(需OS支持这个异步IO操作). 这个时候,事件处理者不在关心读/写事件,它只管发这么个请求,它所关注的是读/写操作事件的完成。其只需发出请求命令后,其它事件交由系统,其只需等待操作的完成消息;
n 事件分离者等着这个读/写事件的完成(与Reactor不同);
n 事件分离者等待完成事件,操作系统进行具体的IO操作,它从目标读取数据,放入用户提供的缓存区中,最后通知事件分离者,IO事情完成;
n 事件分离者通知之前的事件处理者: IO事件完成;
事件处理者,对已存放在缓冲区中的数据进行处理。- ASIO 之 剖 析--(1) 初识 ASIO
- ASIO 之 剖 析--(2) 剖析 ASIO
- ASIO
- asio
- asio
- ASIO
- 初识 boost 与asio
- ASIO 之 剖 析--(3) 以Proactor模式的角度来剖析ASIO
- ASIO 之 剖 析--(4) 以Proactor模式的角度来剖析ASIO
- ASIO 之 剖 析--(5) 以Proactor模式的角度来剖析ASIO
- boost之asio相关
- boost之asio分析
- boost::asio 之io_service
- Boost Asio之Resolver
- Boost-asio之二
- Boost-asio之三
- Boost-asio之四
- boost asio 学习1
- u-boot-2011.09在ST2410上启动流程分析
- 分析一个程序
- 如何实现对UITextField ,UITextView等输入框的 字数限制
- Hibernate POJO为什么要实现Serializable接口
- 求多项式的解
- ASIO 之 剖 析--(1) 初识 ASIO
- 面包屑导航
- 书摘---创业36条军规1:创业是怎么回事
- 批量删除GridView(DataGrid)选中项
- u-boot移植流程的C语言描述
- hadoop跨域集群构建实验
- 使cxgrid中某列下拉列表自动下拉
- UBL descriptor ti dm365 引导分析 RBL,UBLU-BOOT
- LINQ 多条件查询 where 条件组建