越来越多地使用并行计算,新的框架功能和快捷方式使其更易于使用(例如,.NET 4中可直接使用的并行扩展)。
现在跨网络的并行性怎么样?我的意思是,与通信,远程机器上的进程创建等相关的所有内容的抽象,等等,在C#中:
NetworkParallel.ForEach(myEnumerable, () =>
{
// Computing and/or access to web ressource or local network database here
});
据我所知,它与多核并行性有很大不同。两个最明显的差异可能是:
尽管存在这些差异,但即使不谈论分布式架构,这种并行性也是非常可能的。
您认为它会在几年内实施吗?你是否同意它能让开发人员轻松开发极其强大的东西,而且痛苦少得多?
例:
考虑一个业务应用程序,它从数据库中提取数据,转换数据并显示统计信息。假设使用所有CPU,这个应用程序需要十秒钟来加载数据,二十秒钟来转换数据,十秒钟来在公司的一台机器上构建图表,而另外十台机器在大多数时间用于5%的CPU 。在这种情况下,每个动作都可以并行完成,整个过程可能需要六到十秒而不是四十秒。
答案 0 :(得分:3)
这通常以与进程内并发不同的方式处理。由于架构而产生的问题要大得多,缺乏共享内存会引起其他问题。
话虽如此,“跨网络的并行性”已经使用了很长时间。最常见的选择是使用Message Passing Interface (MPI)。甚至还有一个C#库,MPI.NET。
现在,“完全抽象化”分区和调用网络的工作的目标尚未完成(尽管MPI确实以相对简单的方式处理了许多这些任务)。我怀疑这种情况很快就会发生,因为当你失去共享内存时会出现许多新的问题。但是,我怀疑像Axum这样的一些项目最终会导致一种非常高度抽象的方法来实现这一点,但我也怀疑这将花费几年时间,因为进程内共享内存并发性是刚刚变得更加普遍和主流。
答案 1 :(得分:1)
现在跨网络的并行性怎么样?我的意思是,与通信,远程机器上的进程创建等相关的所有内容的抽象等。
之前已经尝试了很多次,这种抽象通常会失败,因为它们体现了fallacies of distributed computing。计算中某个时候网络故障的可能性远远高于正常的硬件故障,因此您需要使用容错和延迟容忍的通信模式,而不是依赖于程序习惯用法。