ace 和 asio
来源:互联网 发布:淘宝返利是怎么弄的 编辑:程序博客网 时间:2024/05/17 22:39
转自:http://anders0913.javaeye.com/blog/387406
ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。
ASIO是基本 Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。
最近分析ASIO的源代码,让我无不惊呀于它设计。 在ACE中开发中的内存管理一直让人头痛,ASIO的出现,让我看到新的曙光,成为我新的好伙伴。简单地与ACE做个比较。
1.层次架构:
ACE底层是C风格的OS适配层,上一层基于C++的 wrap类,再上一层是一些框架(Accpetor, Connector,Reactor等),最上一层是框架上服务。
ASIO与之类似,底层 是OS的适配层,上一层一些模板类,再上一层模板类的参数化(TCP/UDP),再上一层是服务,它只有一种框架为io_service。
2.涉及范围:
ACE包含了日志,IPC,线程,共享内存,配置服务 等。
ASIO只涉及到Socket,提供简单的线程操作。
3. 设计模式:
ACE主要应用了Reactor,Proactor等。
而ASIO主要应用了Proactor。
4.线程调度:
ACE的Reactor是单线程调度,Proactor 支持多线程调度。
ASIO支持单线程与多线程调度。
5.事 件分派处理:
ACE主要是注册handler类,当事件分派时,调用其handler的虚挂勾函数。实现 ACE_Handler/ACE_Svc_Handler/ACE_Event_handler等类的虚函数。
ASIO是基于函数对象的 hanlder事件分派。任何函数都可能成功hanlder,少了一堆虚表的维护,调度上优于ACE。
6.发布方式:
ACE是开源免费的,不依赖于第3方库, 一般应用使用它时,以动态链接的方式发布动态库。
ASIO是开源免费的,依赖Boost,应用使用时只要include头文件,不需动态库。
7.可移植性:
ACE支持多种平台,可移植性不存在问题,据说 socket编程在linux下有不少bugs。
ASIO支持多种平台,可移植性不存在问题。
8.开发难度:
基于ACE开发应用,对程序员要求比较高,要用好它,必须 非常了解其框架。在其框架下开发,往往new出一个对象,不知在什么地方释放好。
基于ASIO开发应用,要求程序员熟悉函数对象,函数指针,熟悉 boost库中的boost::bind。内存管理控制方便。
我个人觉得,如果应用socket编程,使用ASIO开发比较好, 开发效率比较高。ACE适合于理论研究,它本来就是源于Douglas的学术研究
ASIO是基本 Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。
最近分析ASIO的源代码,让我无不惊呀于它设计。 在ACE中开发中的内存管理一直让人头痛,ASIO的出现,让我看到新的曙光,成为我新的好伙伴。简单地与ACE做个比较。
1.层次架构:
ACE底层是C风格的OS适配层,上一层基于C++的 wrap类,再上一层是一些框架(Accpetor, Connector,Reactor等),最上一层是框架上服务。
ASIO与之类似,底层 是OS的适配层,上一层一些模板类,再上一层模板类的参数化(TCP/UDP),再上一层是服务,它只有一种框架为io_service。
2.涉及范围:
ACE包含了日志,IPC,线程,共享内存,配置服务 等。
ASIO只涉及到Socket,提供简单的线程操作。
3. 设计模式:
ACE主要应用了Reactor,Proactor等。
而ASIO主要应用了Proactor。
4.线程调度:
ACE的Reactor是单线程调度,Proactor 支持多线程调度。
ASIO支持单线程与多线程调度。
5.事 件分派处理:
ACE主要是注册handler类,当事件分派时,调用其handler的虚挂勾函数。实现 ACE_Handler/ACE_Svc_Handler/ACE_Event_handler等类的虚函数。
ASIO是基于函数对象的 hanlder事件分派。任何函数都可能成功hanlder,少了一堆虚表的维护,调度上优于ACE。
6.发布方式:
ACE是开源免费的,不依赖于第3方库, 一般应用使用它时,以动态链接的方式发布动态库。
ASIO是开源免费的,依赖Boost,应用使用时只要include头文件,不需动态库。
7.可移植性:
ACE支持多种平台,可移植性不存在问题,据说 socket编程在linux下有不少bugs。
ASIO支持多种平台,可移植性不存在问题。
8.开发难度:
基于ACE开发应用,对程序员要求比较高,要用好它,必须 非常了解其框架。在其框架下开发,往往new出一个对象,不知在什么地方释放好。
基于ASIO开发应用,要求程序员熟悉函数对象,函数指针,熟悉 boost库中的boost::bind。内存管理控制方便。
我个人觉得,如果应用socket编程,使用ASIO开发比较好, 开发效率比较高。ACE适合于理论研究,它本来就是源于Douglas的学术研究
- ace 和 asio
- 转帖两篇关于ACE和boost::asio的文章
- 转帖两篇关于ACE和boost::asio的文章
- Boost.Asio和ACE之间关于Socket编程的比较
- Boost.Asio和ACE之间关于Socket编程的比较
- Boost.Asio和ACE之间关于Socket编程的比较
- Boost.Asio和ACE之间关于Socket编程的比较
- Boost.Asio和ACE之间关于Socket编程的比较
- Boost.Asio和ACE之间关于Socket编程的比较
- Boost.Asio和ACE之间关于Socket编程的比较
- Boost.Asio和ACE之间关于Socket编程的比较
- Boost.Asio和ACE之间关于Socket编程的比较
- asio/ACE/apr/libevent
- asio/ACE/apr/libevent
- asio/ACE/apr/libevent
- 【兴趣爱好】之:Boost.Asio和ACE之间关于Socket编程的比较
- Boost.Asio,libevent和ACE之间关于Socket编程的比较(★firecat推荐★)
- Boost.Asio与ACE比较(C++):
- png图片结构分析与加密解密原理
- Java中逻辑与,逻辑或,按位与,按位或的区分
- 电子线路基础 5-----第 5 讲笔记
- 几点小结
- Tomcat 整理
- ace 和 asio
- 斯坦福大学开发PETE装置吸收60%的太阳能
- 自己整理的OCI文档,抛砖引玉
- mysql 高版本jdbc驱动程序 使用PreparedStatement.setBinaryStream方法报错及解决办法
- ORA-00947及解决
- Button样式
- sql日期格式
- 多线程服务器的适用场合
- Server.Transfer