C ++多线程与多台机器

时间:2012-03-15 17:47:37

标签: c++ multithreading unix

我的问题如下。我有一段代码可以在多个虚拟机上运行,​​每个虚拟机都有N个接口(每个都有一个线程)。问题本身是在一个接口上接收消息,并以最快的方式将其重定向到另一个接口。

我正在做的是,当我在一个界面(单播)上收到消息时,计算我想要重定向的接口,保存有关消息的所有信息(数据报,以及我想要的所有额外信息)用我做的功能。然后在下一次迭代中,程序检查是否有新消息要重定向,以及是否是读取它的正确接口。等等...但这使得程序交换信息非常缓慢......

是否有任何机制可以加快速度?

3 个答案:

答案 0 :(得分:3)

有人已经发明了这种特殊的轮子 - 它被称为MPI

查看openMPIMPICH

答案 1 :(得分:1)

你为什么不使用排队?当消息进入时,将它们放在队列中并通知每个处理模块从队列中取出它们。 例如:

  • MSG进来
  • 模块1将其置于队列
  • 模块2,3获得通知
  • 模块2从队列中提取并将其保存在数据库中
  • 同时,模块3从队列中挑选并处理它

关键是“并行”。由于这些模块是不同的线程,而模块2保存到数据库,模块3可以按摩您的消息。

您可以使用JMS或MQ或自己创建队列。

答案 2 :(得分:1)

听起来你正试图跨多个“机器”进行并行计算(即使是虚拟机)。您可能希望查看现有协议,例如MPI - Message Passing Interface来处理此域,因为它们具有许多有助于此类场景的功能