美好的一天!
这些库有什么区别?
我阅读了MPI的文档并且对asio有一点经验。对我而言,情况有所不同 网络通信的实现,不再是。
但他们每个都引入了不同的抽象(我不确定相同的水平 这些抽象导致不同的应用程序设计。
什么时候应该使用一个库?我必须知道选择正确的方法 在每个单独的情况下作出决定?
是的,Asio适用于多个节点(一般都是非常通用的框架),但为什么MPI对这些任务不太好?我不认为对MPI C库的依赖性是限制性的,或MPI难以理解,可扩展性如何?使用Asio,我们可以实现广播和其他方面的东西,而另一方面,MPI不禁止编写简单的网络应用程序。如果需要,在概念上难以用MPI重写Asio特定的逻辑吗?
类似套接字的通信怎么样:如果它是强制性的,我们可以将这个模块封装在Asio或任何其他框架的模块中,并仍然使用MPI进行其他通信。
对我而言,sokets和MPI标准是不同的网络服务,并且不清楚现实世界中的基础是什么,从简单的客户端 - 服务器对到某些中等计算的距离是一步。另外,我认为MPI与Asio相比没有显着的开销。
也许这是一个糟糕的问题,而我们所需要的只是ICE(互联网通信引擎)?不同的语言支持并再次(确保ZeroC)表现出色。
当然,我从未在任何文档主题中看到过“不要使用此库!”。
我根本不能采取这种不统一态度:在一种情况下,它是套接字,在另一种情况下 - 异步消息,最后是重型中间件平台。开发生命周期的清晰度在哪里?也许这不是公平的问题,但是为了开始减少这个动物园,我们需要一些观点。
答案 0 :(得分:5)
每个库解决了不同的问题,它们并没有真正重叠。它还取决于您要解决的问题以及应用程序的通信模式。使用Boost.MPI获得可伸缩性,例如扩展到数千个或数万个节点。根据底层网络架构,MPI还擅长集体运营:收集,分散,广播等。
如果您只需要少量节点(例如单个服务器和一些客户端),请使用Boost.Asio作为套接字抽象层。如果你还没有以某种方式使用MPI发行版,我建议使用Boost.Asio。
答案 1 :(得分:3)
我没有同时使用它们,但是Boost.ASIO更像是一个低层网络的抽象层,而Boost.MPI实现了MPI标准,让你可以创建分布式计算系统。
因此,如果您需要一些类似套接字的通信,我会选择ASIO。如果您想进行分布式计算,甚至可以与其他语言/其他平台编写的MPI程序进行互操作,请使用Boost.MPI。