C / C ++高频消息程序

时间:2011-12-03 20:57:03

标签: c boost ace

最近我遇到了POCO和ACE网络框架,以及我已经知道的Boost。

我的问题是,这些库传递消息的速度是否比使用Berkeley套接字的常规C程序快?这些库是否仅受欢迎,因为它们增加了多线程等功能,这有助于提高性能因素?

我想在Linux上编写一个高性能的消息传递系统,但是如果我应该避免使用ACE,POCO和Boost,而只是使用Linux线程操作系统函数和berkeley套接字,我就无法解决这个问题?

换句话说,我对通用代码不感兴趣,使我的代码“STL友好”等等。我只想要原始性能(无需编写汇编!)。

3 个答案:

答案 0 :(得分:1)

你看过0MQ (aka ZeroMQ)了吗?引自他们的网站:

ØMQ \zeromq\:
 Ø  The socket library that acts as a concurrency framework.
 Ø  Faster than TCP, for clustered products and supercomputing.
 Ø  Carries messages across inproc, IPC, TCP, and multicast.
 Ø  Connect N-to-N via fanout, pubsub, pipeline, request-reply.
 Ø  Asynch I/O for scalable multicore message-passing apps.
 Ø  Large and active open source community.
 Ø  30+ languages including C, C++, Java, .NET, Python.
 Ø  Most OSes including Linux, Windows, OS X.
 Ø  LGPL free software with full commercial support from iMatix.

答案 1 :(得分:0)

如果没有太多关于您的用例的分享,您会提出很多要求。根据您的编写,您似乎需要在连接到网络的计算机之间进行消息传递。它是所有点对点,还是一些机器“服务器”,还有其他客户端?像ACE这样的库提供了从简单的便利类到包装任何类型的套接字通信和多线程,再到完整的服务器,几乎可以使用你能想到的任何模型。

假设您需要某种服务器,那么关于您是应该使用线程还是使用单线程异步还是存在争议。同样,根据用例,一个将比另一个“更好”(它实际上取决于你需要做什么)。

在网络部分,您是否需要可靠的有序消息,或者当您能够检测到数据包丢失时,每条消息都已过时?为了可靠性,您通常会在TCP之上构建,但根据您需要做什么,您可以在UDP上设计一个运行速度更快的协议。

除非您的要求非常简单和基本,并且/或者之前已经编写了大量的网络多线程代码,否则最好使用编写良好的软件包而不是尝试重新创建所有内容。

答案 2 :(得分:0)

免责声明:我写的。

如果您正在寻找原始速度,尤其是对于有多个订阅者的信号,以及简单的集成,我们尝试使用DSTC (Distributed C)解决该问题。

优势

  • 要包含一个头文件,两个要链接的库。
  • 没有存根代码生成或奇怪的构建步骤。
  • 一行C代码用于导出或导入远程功能。
  • 使用单个内核,通过10GB以太网每秒
  • 10M RPC调用。
  • 在一台像样的笔记本电脑上通过本地主机每秒进行2000万次呼叫。
  • C / C ++ / Python支持。

缺点:

  • 没有安全性,它必须在受保护的环境中运行。
  • 原始。它仅做两件事,即RPC和pub / sub。
  • 没有可用的回调函数。