Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对于简单的应用程序,boost::signals2是否过度杀伤力?_C++_C++11_Boost_Signals Slots_Boost Signals2 - Fatal编程技术网

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

C++ 对于简单的应用程序,boost::signals2是否过度杀伤力?,c++,c++11,boost,signals-slots,boost-signals2,C++,C++11,Boost,Signals Slots,Boost Signals2,在受限于C++03的环境中,boost::signals2与boost::function和boost::bind一起使用,以实现组件之间的简单消息传递系统。它工作得很好,我对它没有任何问题 但是,在另一个完全支持C++11的环境中,对于非常简单的应用程序来说,boost::signals2是不是太过了? 为了澄清,我所说的简单是指以下内容: 单螺纹 所有信号都具有返回类型void 性能是此应用程序的关键,因此应用程序不需要的所有boost::signals2奇迹可能弊大于利 现在,有一个简

在受限于
C++03
的环境中,
boost::signals2
boost::function
boost::bind
一起使用,以实现组件之间的简单消息传递系统。它工作得很好,我对它没有任何问题

但是,在另一个完全支持
C++11
的环境中,对于非常简单的应用程序来说,boost::signals2是不是太过了?

为了澄清,我所说的简单是指以下内容:

  • 单螺纹
  • 所有信号都具有返回类型
    void
性能是此应用程序的关键,因此应用程序不需要的所有
boost::signals2
奇迹可能弊大于利


现在,有一个简单的
std::vector
来处理这个问题,如果认为合适的话,切换到其他东西,如
boost::signals2
将非常简单。

结束评论中的对话:


似乎这个问题已经归结为,停止理论化,开始基准测试


最后,我发现
boost::signals2
的一些附加功能非常有用(例如插槽上的
.track
),值得任何性能成本(如果有的话),它们产生了。

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

我的主要兴趣是与回调函数实现的简单向量相比,
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 基准持续时间(标准化) --------------------------------------------------------------------- 直接函数调用1 函数指针调用1 虚拟函数调用1 std::函数调用1.5 向量调用2 boost::信号调用78 boost::signals2信号调用(虚拟互斥)43 boost::信号2信号调用92 这些测量是在Ubuntu 15.04和GCC4.9.2、optimization-O2、BoostV1.55上进行的。因为绝对值在我的框外可能毫无意义,所以这些值是标准化的。更新版本的Boost可能会更快

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


如果您想在您的机器上重现测量值,代码是可用的。

那么,您的探查器从
Boost.Signals2
中告诉您的CPU/内存使用量是多少?这甚至是一个瓶颈吗?如果性能是关键,我通常会发现自己没有实现可订阅的事件或可观察的。这永远是一个独立的处理层。正如安德烈·亚历山德雷斯库所说<代码>唯一的好直觉:“我应该时间。”三个C++优化提示,似乎这个问题已经归结为,停止理论化,开始标杆。谢谢你的帮助。@IgorR。谢谢你,在阅读了这篇文章和其他一些文章之后,我最终使用了boost::signals2:)非常感谢你,这是一个非常显著的区别。