哪些挑战促进了并行/并发架构的使用?

时间:2009-02-12 14:00:05

标签: concurrency erlang parallel-processing python-stackless stackless

我很高兴能够使用内置并行/并发的语言,例如stackless pythonerlang,并且坚信我们都必须进入方向太长 - 或者想要,因为它将是获得可扩展性和性能的好/简单方法。

但是,我习惯于以线性/串行/ OOP /功能方式思考解决方案,我正在努力以一种值得使用并发的方式来解决我的任何域问题。我怀疑我只需要忘记了很多,但我想我会问以下问题:

  • 你是否在无堆栈或erlang或其他方面实现了相当大的任何东西?
  • 为什么这是一个不错的选择?这是一个不错的选择吗?你会再做一次吗?
  • 您的问题的哪些特征意味着并发/并行是正确的?
  • 您是否重新构建了一个利用并发/并行性的问题?和
  • 若然,怎么样?

他们愿意分享任何经验吗?

4 个答案:

答案 0 :(得分:4)

过去当台式机具有单个CPU时,并行化仅适用于“特殊”并行硬件。但是现在桌面通常有2到8个内核,所以现在并行硬件是标准配置。这是一个很大的区别,因此它不仅仅是关于建议并行性的问题,而且还关注如何将并行性应用于更广泛的问题

为了利用并行性,您通常需要以某种方式重塑您的问题。 Parallelism以多种方式改变了游乐场:

  • 您可以获得数据一致性和锁定问题。因此,您需要尝试组织您的问题,以便您拥有半独立的数据结构,可以由不同的线程,进程和计算节点处理。
  • 如果并行组件执行其工作的相对顺序影响结果,则并行性还可以将非确定性引入计算中。您可能需要对此进行保护,并定义算法的并行版本,该版本对不同的调度顺序具有鲁棒性。
  • 当您超越主板内部并行性并进入网络/集群/网格计算时,您还会遇到网络带宽,网络故障以及失败的计算节点的正确管理问题。您可能需要修改问题,以便在网络节点出现故障时更容易处理部分计算丢失的情况。

答案 1 :(得分:2)

在我们拥有操作系统之前,建立应用程序的人会坐下来讨论以下内容:

  • 我们将如何在磁盘上存储数据
  • 我们将使用什么文件系统结构
  • 我们的应用程序将使用哪种硬件
  • 等等

操作系统来自“开发者库”的集合。

操作系统的优点在于您的UNWRITTEN软件具有某些特性,它可以:

  • 与永久存储交谈
  • 与网络对话
  • 在命令行中运行
  • 批量使用
  • 与GUI交谈
  • 等等

一旦你转移到操作系统 - 你就不会回到原状......

Erlang / OTP(即非Erlang)是一个应用程序系统 - 它在两台或多台计算机上运行。

应用系统的优点在于您的UNWRITTEN软件具有某些特性,它可以:

  • 在两台机器之间进行故障转移
  • 在群集中工作
  • 等等...

猜猜一下,一旦你转移到应用系统 - 你也不会回去......

您不必使用Erlang / OTP,Google在其应用引擎中拥有良好的应用系统,因此不要对语言语法感到困惑。

基于Erlang / OTP堆栈而不是Google App Engine可能有很好的商业理由 - 贵公司的商业开发人员会为您打电话。

答案 2 :(得分:1)

未来的问题将几乎保持不变,但实现的底层硬件正在发生变化。要使用它,对象(组件,进程,服务,以及如何调用它)之间的计算方式将发生变化。消息将异步发送,无需等待直接响应。相反,在完成一项工作后,该过程将使用答案回复发件人。这就像人们一起工作。

我目前正在设计一种基于Erlang / OTP的轻量级事件驱动架构。它被称为Tideland EAS。我在这里描述了这些想法和原则:http://code.google.com/p/tideland-eas/wiki/IdeasAndPrinciples。它没有准备好,但也许你会理解我的意思。

MUE

答案 3 :(得分:0)

Erlang让你想到并行的问题。你不会忘记它一秒钟。过了一会儿你适应了。不是一个大问题。除了解决方案在每个小角落变得平行。您必须调整所有其他语言。要并发。这感觉并不自然。然后你最终讨厌你的解决方案。不好玩。

Erlang的最大优势是它没有全球垃圾收集。它永远不会休息。当你每秒有10000次页面浏览时,这很重要。