2012-03-15 66 views
0

那麼我的問題如下。我有一段運行在多個虛擬機上的代碼,每個虛擬機都有N個接口(每個接口有一個線程)。問題本身就是在一個接口上接收消息,並以最快的方式通過另一個接口重定向它。C++多機多線程

我正在做的是,當我在一個接口(Unicast)上收到消息時,計算我要重定向它的接口,保存關於消息的所有信息(數據報,以及我想要的所有額外信息)與我所做的功能。然後在下一次迭代中,程序檢查是否有新消息要重定向,以及它是否正確讀取它。等等......但這使得程序交換信息非常緩慢......

有什麼機制可以加快速度嗎?

+3

除非您正在研究「緊密耦合」羣集,否則不需要這裏的意思是多線程,你的意思是「多處理」或者「進程間IO」。 – dmckee 2012-03-15 17:50:11

+0

這不可能是模糊和開放式的。你可以發佈一些示例代碼來展示你現在正在做什麼,你得到什麼樣的性能數據以及你如何衡量等等。 – Useless 2012-03-15 17:51:32

+0

@dmckee可能是...我是新手,這是我的簡介... – 2012-03-16 11:22:36

回答

3

有人已經發明瞭這個特殊的輪子 - 這就是所謂的MPI

看看要麼openMPIMPICH

+0

感謝您的回覆!我會檢查一下,看看我能否滿足所有的要求!再次感謝 – 2012-03-16 11:18:51

1

你爲什麼不使用排隊?隨着消息的進入,將它們放在隊列中並通知每個處理模塊從隊列中選取它們。 例如:

  • MSG進來
  • 模塊1把它放在隊列
  • 模塊2,3得到通知
  • 模塊2個撿起來從隊列並在數據庫中保存的它
  • 同時,模塊3從隊列中提取並處理它

關鍵是「並行」。由於這些模塊是不同的線程,而模塊2保存到數據庫,模塊3可以按摩您的消息。

您可以使用JMS或MQ或創建自己的隊列。

+0

感謝您的信息!我將繼續介紹MPI,如果我無法管理所有事情,我將嘗試採用排隊機制 – 2012-03-16 11:20:48

1

聽起來好像你正試圖在多個「機器」上進行並行計算(即使是虛擬的)。您可能需要查看現有協議,例如MPI - Message Passing Interface來處理此域,因爲它們有相當多的功能可以幫助解決此類場景

+0

感謝您的信息!我會看看我是否可以用MPI來管理所有事情! – 2012-03-16 11:19:41