Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 vs ACE C++;跨平台性能比较?_C++_Performance_Boost_Cross Platform_Ace Tao - Fatal编程技术网

C++ boost vs ACE C++;跨平台性能比较?

C++ boost vs ACE C++;跨平台性能比较?,c++,performance,boost,cross-platform,ace-tao,C++,Performance,Boost,Cross Platform,Ace Tao,我参与了一个将一些通信、解析和数据处理功能从Win32移植到Linux的项目,这两项功能都将得到支持。问题域对吞吐量和性能非常敏感 我对boost和ACE的性能特征几乎没有经验。具体来说,我们想了解哪个库为线程提供了最佳性能 有人能提供一些关于两者之间的相对性能的数据吗?有文件记录的,口碑相传的,或者一些链接 编辑 谢谢大家。确认了我们最初的想法-我们很可能会选择boost作为系统级跨平台工具。与使用本机操作系统线程功能相比,这两个库都不应该有任何开销。您应该看看哪个API更干净。在我看来,bo

我参与了一个将一些通信、解析和数据处理功能从Win32移植到Linux的项目,这两项功能都将得到支持。问题域对吞吐量和性能非常敏感

我对boost和ACE的性能特征几乎没有经验。具体来说,我们想了解哪个库为线程提供了最佳性能

有人能提供一些关于两者之间的相对性能的数据吗?有文件记录的,口碑相传的,或者一些链接

编辑


谢谢大家。确认了我们最初的想法-我们很可能会选择boost作为系统级跨平台工具。

与使用本机操作系统线程功能相比,这两个库都不应该有任何开销。您应该看看哪个API更干净。在我看来,boostthreadapi更易于使用


ACE往往更像“经典OO”,而Boost往往从C++标准库的设计中汲取。例如,在ACE中启动线程需要创建从ACE_任务派生的新类,并重写线程运行时调用的virtual svc()函数。在boost中,您可以创建一个线程并运行您想要的任何功能,这大大减少了侵入性。

线程实际上只是boost和ACE提供的功能的一小部分,而且两者在总体上并不具有可比性。我同意boost更易于使用,因为ACE是一个相当沉重的框架。

不要担心操作系统抽象层在线程和同步对象上的开销。线程开销实际上并不重要(因为它只适用于线程创建,与pimpl指针间接寻址的开销相比,线程创建已经非常慢)。如果您发现互斥操作使您的速度变慢,那么最好查看原子操作或重新安排数据访问模式以避免争用

关于boost与ACE,这是一个“新风格”与“旧风格”编程的问题。Boost有很多基于页眉模板的恶作剧(如果你能欣赏的话,这很好用)。另一方面,如果你习惯了“C类”的C++风格,ACE会感觉更自然。我相信这主要是你的团队个人品味的问题。

我不会称ACE为“带类的C”。ACE不是直观的,但如果你花时间按照预期使用框架,你不会后悔


据我所知,在阅读了Boost的文档之后,我想使用ACE的框架和Boost的容器类。

帮自己一个忙,避开ACE。如果你问我的话,这是一个可怕的、可怕的图书馆,根本不应该被写出来。3年来,我一直工作(或更确切地说,必须与之合作),我告诉你,这是一个设计拙劣、文档化不足、使用的C++不完善的垃圾碎片,并建立在完全脑死亡的设计决策上。将ACE称为“带类的C”实际上是帮了忙。如果你研究它的一些结构的内部实现,你通常很难抑制你的呕吐反射。 此外,我再怎么强调“糟糕的文档”方面也不为过。通常,ACE记录函数的概念包括简单地打印函数的签名。至于它的参数的含义,它的返回值和它的一般行为,你通常需要自己去弄清楚。我已经厌倦了猜测函数可能抛出哪些异常,哪个返回值表示成功,我必须传递哪些参数才能使函数完成我需要它做的事情,或者函数/类是否是线程安全的


另一方面,Boost是简单易用的,现代C++,文档非常丰富,它只是工作!前进的道路是前进,与王牌一起倒下即使ACE是一种老的C++,它仍然有许多线程化的特性,但是Boost还没有提供。p>
目前,我认为没有理由不同时使用这两种方法(但目的不同)。一旦Boost提供了一种简单的方法来实现任务之间的消息队列,我可以考虑放弃ACE。

< P>我已经使用ACE多年了(8),但我刚刚开始研究Boost在下次项目中的使用。我正在考虑Boost,因为它有一个更大的工具包(ReGEX等),并且它的一些部分被吸收到C++标准中,所以长期维护应该更容易。
也就是说,提振需要一些调整。尽管Greg提到线程支持的侵入性较小,因为它可以运行任何(C或静态)函数,但如果您习惯于使用更类似于Java和C#thread类(ACE#U任务提供的)的线程类,您必须使用一些技巧才能获得与boost相同的性能。

我已经在许多重型生产服务器上使用了ACE。我从未失望过。这是坚如磐石,并做了多年的工作,现在。试图学习BOOST的ASIO网络框架并没有抓住窍门。Boost是一种更“现代”的C++,它对非平凡任务也很难使用,而没有“现代”C++经验和深层STL知识,很难正确使用

< P>使用ACE和协作推进。ACE有更好的基于OO设计模式的通信API,而boost有类似“现代C++”的设计,并且可以很好地处理容器等

我们开始使用ACE,认为它会在TCP套接字和select调用中隐藏windows和unix之间存在的平台差异。事实证明,事实并非如此。Ace采用的select(反应器模式)不能在windows上混合套接字和stdin,平台之间关于套接字可写性通知的语义差异仍然存在于Ace级别

当我们意识到这一点时,我们已经在使用ACE的线程和进程特性(后者同样不会隐藏平台的差异,因为我们会