boost asio库中同步、异步工作机制
来源:互联网 发布:知乎两性关系 编辑:程序博客网 时间:2024/05/01 14:53
本文翻译自boost::asio库的说明文档,不是完整翻译。
=========================
asio使用了设计模式中的前摄器模式(Proactor),使用io_service作为前摄器,可以处理同步和异步的I/O请求,多用于网络通信。
每个使用asio库的程序都必须有一个io_service对象,负责管理与操作系统底层的通信。为进行I/O操作,还必须有一个IO对象,如一个TCP或UDP的套接字(socket)。
1.同步操作
1.1. 应用 程序调用I/O对象,初始化连接:
socket.connect(server_endpoint);
1.2. I/O对象将请求传递给io_service对象。
1.3. io_service对象在操作系统底层上完成连接操作。
1.4.操作系统将执行结果返回给io_service对象。
1.5. io_service将可能产生的错误放入boost::system::error_code对象中,并将结果返回给I/O对象。
1.6. 如果操作失败,I/O对象抛出boost::system::system_error异常;如果成功则执行连接操作。
boost::system::error_code ec;socket.connect(server_endpoint, ec);
2.异步操作
2.1. Your program initiates the connect operation by calling theI/O object:应用程序调用I/O对象,初始化连接:
socket.async_connect(server_endpoint, your_completion_handler);
这里your_completion_handler是以下签名的函数或函数对象,准确形式由不同的异步操作而定:
void your_completion_handler(const boost::system::error_code& ec);
2.2. I/O对象将请求传递给io_service对象。
2.3. io_service对象告知操作系统将开始一个异步的连接。连接开始。
2.4. 操作系统将消息放置到一个队列中,等待io_service对象读取。
2.5. 应用程序调用io_service::run()或类似的成员函数来获取结果。当调用这个函数时,如果有未完成的异步操作,会发生“阻塞”,因此一般应在初次进行异步操作时调用。
2.6. 当调用io_service::run()时,
io_service对象取出了队列中的信息,将其转换为一个error_code并传递给completion handler。
- boost asio库中同步、异步工作机制
- 异步工作 boost asio
- C++ Boost库 asio同步/异步模式[ 定时器来体现 ]
- boost::asio 异步超时机制一
- BOOST-计时器-同步、异步(boost::asio::deadline_timer)
- C++ Boost库 asio同步/异步模式[ 定时器来体现 ] [大三四八九月实习]
- C++ Boost库 asio同步/异步模式[ 定时器来体现 ] 笔记
- boost:asio的同步方式和异步方式
- boost:asio的同步方式和异步方式
- boost:asio的同步方式和异步方式
- boost::asio的同步方式和异步方式网络编程
- boost::ASIO的同步方式和异步方式
- Boost asio 同步和异步socke处理的流程
- boost-asio学习1——定时器(同步、异步)
- boost-asio学习2——同步、异步socket处理
- boost::ASIO的同步方式和异步方式
- boost asio异步通信
- boost asio 异步
- 关于指针
- 分区索引笔记(三)--全局分区索引
- 56页E4题解
- ftoa的简单实现
- oracle 重建OEM
- boost asio库中同步、异步工作机制
- xp下解决vim中文乱码问题
- 安卓基础-点击事件的几种写法
- ASP.NET MVC原理
- 谈谈 微软 鲍尔默退休,他错在哪里?该怎么做!
- 耿建玲视频数据库系统导图总结
- Android 自定义checkBox
- 菜鸟收藏:7.1声道是什么?什么是7.1声道?【xpghost】
- jsp中有哪些动作?