1

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

我的问题是,这些库在传递消息方面是否比带有 Berkeley 套接字的常规 C 程序更快?这些库是否只是因为它们添加了多线程等特性而流行,这有助于提高性能因素?

我想在 Linux 上编写一个高性能的消息传递系统,但我不知道是否应该避免使用 ACE 、 POCO 和 Boost 而是只使用 Linux 线程 OS 函数和 berkeley 套接字?

换句话说,我不关心通用代码,使我的代码“对 STL 友好”等。我只想要原始性能(无需编写程序集!)。

4

3 回答 3

1

你看过0MQ(又名 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.
于 2011-12-03T20:58:35.950 回答
0

你问了很多,但没有分享太多关于你的用例。从您所写的内容来看,您似乎需要在连接到网络的机器之间进行消息传递。都是点对点的,还是某些机器是“服务器”,而其他机器是客户端?诸如 ACE 之类的库提供了一切,从用于包装任何类型的套接字通信和多线程的简单便利类,到完全成熟的服务器,几乎可以使用您能想到的任何模型。

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

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

除非您的要求非常简单和基本,和/或您以前编写过许多联网的多线程代码,否则您最好使用编写良好的包,而不是尝试自己重新发明一切。

于 2011-12-03T21:10:31.057 回答
0

免责声明:我写的。

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

好处

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

缺点:

  • 没有安全性,它必须在受保护的环境中运行。
  • 原始。它只做两件事,RPC 和 pub/sub。
  • 没有返回值,尽管回调可用。
于 2020-05-03T16:24:33.493 回答