代码之家  ›  专栏  ›  技术社区  ›  Arseni Mourzenko

使用多台PC的跨网络并行性如何?

  •  2
  • Arseni Mourzenko  · 技术社区  · 15 年前

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

    那么整个网络的并行性呢?我的意思是,与通信、在远程机器上创建进程等相关的所有事物的抽象,比如C:

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

    我理解它与多核并行非常不同。两个最明显的区别可能是:

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

    尽管存在这些差异,但这种并行性是完全可能的,即使不讨论分布式体系结构。

    你认为它会在几年内实施吗?您是否同意它使开发人员能够轻松地开发非常强大的东西而不那么痛苦?

    例子:
    考虑一个业务应用程序,它从数据库中提取数据,转换数据,并显示统计信息。假设这个应用程序需要10秒钟来加载数据,20秒钟来转换数据,10秒钟来在一个公司的一台机器上构建图表,使用所有的CPU,而其他10台机器大部分时间都使用5%的CPU。在这种情况下,每一个动作都可以并行进行,这样整个过程可能需要6到10秒,而不是40秒。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Reed Copsey    15 年前

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

    也就是说,“跨网络并行”已经使用了很长时间。最常见的选择是使用 Message Passing Interface (MPI) . 甚至还有一个C库, MPI.NET .

    现在,“完全抽象”跨网络的分区和调用工作的目标还没有完成(尽管MPI确实以一种相对简单的方式处理了许多这些任务)。我也怀疑这会很快发生,因为当你失去共享记忆时,会出现许多新的担忧。但是,我怀疑一些项目,如 Axum 最终将导致实现这一点的高度抽象的方法,但我也怀疑这将是相当长的一段时间,因为在处理过程中,共享内存并发现在正变得越来越普遍和主流。

        2
  •  1
  •   Pete Kirkham    15 年前

    那么整个网络的并行性呢?我的意思是,与通信、在远程机器上创建进程等相关的所有事物的抽象。

    它已经被试过很多次了,这种抽象通常会失败,因为它们体现了 fallacies of distributed computing . 计算中某个时间发生网络故障的可能性远高于正常的硬件故障,因此您需要使用容错和延迟通信模式,而不是依赖过程习惯用法。

    推荐文章