4

我对使用内置并行性/并发性的语言的可能性感到非常兴奋,例如stackless pythonerlang,并且坚信我们都必须在不久的将来朝着这个方向前进 - 或者会想要因为这将是获得可扩展性和性能的好方法/简单方法。

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

  • 您是否在 stackless 或 erlang 或其他中实现了任何相当大的东西?
  • 为什么这是一个不错的选择?这是一个不错的选择吗?你还会做吗?
  • 您的问题的哪些特征意味着并发/并行是正确的?
  • 您是否重新提出了现有问题以利用并发/并行性?和
  • 如果是这样,如何?

有谁愿意分享经验吗?

4

4 回答 4

4

过去,当台式机只有一个 CPU 时,并行化只适用于“特殊”并行硬件。但是现在台式机通常有 2 到 8 个内核,所以现在并行硬件是标准配置。这是一个很大的区别,因此不仅仅是哪些问题暗示了并行性,还在于如何将并行性应用于比以前更广泛的问题。

为了利用并行性,您通常需要以某些方式重铸您的问题。并行性在许多方面改变了操场:

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

在我们有操作系统之前,构建应用程序的人会坐下来讨论以下问题:

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

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

操作系统的美妙之处在于您的 UNWRITTEN 软件具有某些特征,它可以:

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

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

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

应用系统的美妙之处在于您的 UNWRITTEN 软件具有某些特征,它可以:

  • 两台机器之间的故障转移
  • 集群工作
  • 等等等等……

你猜怎么着,一旦你转移到一个应用系统——你也不会回去……

你不必使用 Erlang/OTP,Google 在他们的应用引擎中有一个很好的应用系统,所以不要纠结于语言语法。

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

于 2009-02-12T22:30:41.400 回答
1

The problems will stay almost the same inf future, but the underlying hardware for the realization is changing. To use this, the way of compunication between objects (components, processes, services, how ever you call it) will change. Messages will be sent asynchronously without waiting for a direct response. Instead after a job is done the process will call the sender back with the answer. It's like people working together.

I'm currently designing a lightweighted event-driven architecture based on Erlang/OTP. It's called Tideland EAS. I'm describing the ideas and principles here: http://code.google.com/p/tideland-eas/wiki/IdeasAndPrinciples. It's not ready, but maybe you'll understand what I mean.

mue

于 2009-02-12T14:32:18.493 回答
0

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

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

于 2009-02-12T21:27:09.807 回答