加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 对于简单的应用程序,boost :: signals2是否过度杀伤?

发布时间:2020-12-16 10:34:25 所属栏目:百科 来源:网络整理
导读:在限制为C 03的环境中,boost :: signals2与boost :: function和boost :: bind一起使用,以在组件之间实现简单的消息传递系统.它工作得很好,我也没有任何问题. 但是,在完全支持C 11的另一个环境中,对于非常简单的应用程序,boost :: signals2是否过度杀伤? 简
在限制为C 03的环境中,boost :: signals2与boost :: function和boost :: bind一起使用,以在组件之间实现简单的消息传递系统.它工作得很好,我也没有任何问题.

但是,在完全支持C 11的另一个环境中,对于非常简单的应用程序,boost :: signals2是否过度杀伤?

简单来说,我的意思是:

>单线程
>所有信号的返回类型均为void

性能是这个应用程序的关键,因此应用程序不需要的boost :: signals2的所有奇迹可能弊大于利.

现在,只有一个std :: vector< std :: function>处理这个问题,如果认为合适的话,切换到boost :: signals2之类的东西会非常简单.

解决方法

我最近遇到了一个类似简单要求的项目的相同问题,并做了一些我想在这里分享的研究.

与简单的回调函数实现相比,我的主要兴趣在于boost :: signals2的开销.最后,我做了一些研究,如下表所示:

    Benchmark                                       Duration (normalized)
    ---------------------------------------------------------------------
    Direct function call                            1
    Function pointer call                           1
    Virtual function call                           1
    std::function call                              1.5
    std::vector<std::function> call                 2
    boost::signals signal invocation                78
    boost::signals2 signal invocation (dummy mutex) 43
    boost::signals2 signal invocation               92

测量采用Ubuntu 15.04,gcc 4.9.2,优化-O2,Boost v1.55.因为绝对值可能在我的框外无意义,所以值被标准化.更新版本的Boost可能会更快.

我的结论是:如果性能很关键并且您不需要线程安全(或其他高级功能)重新考虑使用boost :: signals2.

如果要在机器上重现这些措施,则代码可用here.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读