• Boost.Asio和ACE之间关于Socket编程的比较


    Boost.Asio和ACE之间关于Socket编程的比较 - 简单的日志 - 网易博客

    Boost.Asio和ACE之间关于Socket编程的比较   

    2010-05-17 17:36:52|  分类: C/C++之boost |  标签:  |字号  订阅

    ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。
    ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。

    最近分析ASIO的源代码,让我无不惊呀于它设计。在ACE中开发中的内存管理一直让人头痛,ASIO的出现,让我看到新的曙光,成为我新的好伙伴。简单地与ACE做个比较。

    boost::asio是一个高性能的网络开发库,Windows下使用IOCP,Linux下使用epoll。与ACE不同的是,它并没有提供一个网络框架,而是采取组件的方式来提供应用接口。但是对于常见的情况,采用一个好用的框架还是能够简化开发过程,特别是asio的各个异步接口的用法都相当类似。

    Boost.Asio是利用当代C++的先进方法,跨平台,异步I/O模型的C++网络库.

    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的学术研究。
  • 相关阅读:
    观察者模式
    hdu 4712 Hamming Distance bfs
    leetcode Sum Root to Leaf Numbers(所有路径之和)
    Oracle实用-01:绑定变量
    jQuery实现AJAX定时刷新局部页面实例
    给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化
    jquery的ajax同步和异步
    报表技术
    告别.NET生成报表统计图的烦恼
    浅谈ASP.NET报表控件
  • 原文地址:https://www.cnblogs.com/lexus/p/2916064.html
Copyright © 2020-2023  润新知