networking - 使用多台 PC 的网络并行性怎么样?

标签 networking parallel-processing

并行计算的使用越来越多,新的框架功能和快捷方式使其更易于使用(例如 .NET 4 中直接提供的并行扩展)。

现在跨网络的并行性怎么样?我的意思是,与通信、在远程计算机上创建进程等相关的所有内容的抽象。类似于 C# 中的内容:

NetworkParallel.ForEach(myEnumerable, () =>
{
    // Computing and/or access to web ressource or local network database here
});

据我了解,它与多核并行有很大不同。两个最明显的区别可能是:

  • 事实上,这种并行任务将仅限于计算,无法使用本地存储的文件(但为什么不能使用数据库?),甚至无法使用本地变量,因为它更像是两个不同的应用程序同一应用程序的两个线程,
  • 非常具体的实现,不仅需要一个单独的线程(这非常简单),而且需要跨不同机器上的进程,然后通过本地网络与它们通信。

尽管存在这些差异,即使不谈论分布式架构,这种并行性也是完全可能的。

您认为几年后会实现吗?您是否同意它使开发人员能够轻松地开发极其强大的东西,并且减少痛苦?

示例:
考虑一个从数据库中提取数据、转换数据并显示统计信息的业务应用程序。假设该应用程序在公司的一台机器上使用了所有 CPU,需要 10 秒来加载数据,20 秒来转换数据,10 秒来构建图表,而其他 10 台机器大多数时候只使用 5% 的 CPU 。在这种情况下,每个操作都可以并行完成,整个过程可能需要六到十秒,而不是四十秒。

最佳答案

这通常以与进程内并发不同的方式处理。由于架构而出现的问题要严重得多,并且缺乏共享内存会导致出现其他问题。

话虽如此,“跨网络并行性”已经使用了很长时间。最常见的选项是使用 Message Passing Interface (MPI) 。甚至还有一个 C# 库可以实现此目的,MPI.NET .

现在,“完全抽象化”网络分区和调用工作的目标尚未完成(尽管 MPI 确实以相对直接的方式处理了许多此类任务)。我也怀疑这会很快发生,因为当你失去共享内存时,会出现许多新的问题。但是,我怀疑某些项目如Axum最终将导致一种非常高度抽象的方法来实现这一目标,但我也怀疑这将需要几年的时间,因为进程内共享内存并发现在正变得更加普遍和主流。

关于networking - 使用多台 PC 的网络并行性怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3018827/

相关文章:

networking - Selenium/webdriver 网络监控

networking - 传输层的流量和错误控制

parallel-processing - OpenMP 并行 - 什么是默认计划?

python - 使用 Python Joblib 的双并行循环

apache - 使用docker bridge网络IP访问apache容器中的vhost

postgresql - 如何从 vagrant virtualbox 机器连接主机 PostgreSQL

c - Recv() 从 DNS 查询返回 0 (C)

ruby-on-rails - 使用 parallel_tests 测试在运行中被杀死

c++ - 多线程 C++ 程序未使用 vector<thread> 和 .join() 并行运行

c# - 是否可以使用 WCF 架构每天处理 1B 请求?