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

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

概述在限制为C 03的环境中,boost :: signals2与boost :: function和boost :: bind一起使用,以在组件之间实现简单的消息传递系统.它工作得很好,我也没有任何问题. 但是,在完全支持C 11的另一个环境中,对于非常简单的应用程序,boost :: signals2是否过度杀伤? 简单来说,我的意思是: >单线程 >所有信号的返回类型均为void 性能是这个应用 在限制为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.

总结

以上是内存溢出为你收集整理的c – 对于简单的应用程序,boost :: signals2是否过度杀伤?全部内容,希望文章能够帮你解决c – 对于简单的应用程序,boost :: signals2是否过度杀伤?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1221219.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存