使用Python来处理类似Erlang的东西:什么在哪里?

时间:2014-01-21 04:57:02

标签: python multithreading concurrency distributed agent

我还不太了解它,但我听说Erlang在处理网络应用方面有点特别;据我了解,这来自于一些早期的设计决策,这些决策允许它有数千个并发进程,而且开销有限。

我本质上是一名python程序员,我最近喜欢使用0mq进行分布式计算like this,直到我遇到this article批评this article

Erlang对于网络/并发性有什么特别之处,以及哪些python库或一组库试图复制/替换它的哪些部分?我无法理解这些项目如何适应分布式网络编程图片:

  • 0mq包装到python
  • stackless python
  • Twisted Python
  • 龙卷风

(据我所知,Celery和RabbitMQ是一种略有不同的野兽,因为它们是消息传递,但它们要求一个队列系统,这是一种特殊类型的分布式计算。)这些“如何”映射到哪个功能,以及应该何时使用?

我还审查了以下内容:

1 个答案:

答案 0 :(得分:2)

你的问题非常广泛,我将简要回答几点。任何语言的并发性都不完美,每种语言,模型,框架,库都有局限性,它们可以完美适用于一部分情况,但一般来说没有什么是完美的。

当我们比较两种语言的并发性时,我们必须看看所有方面。 Erlang受欢迎的原因有很多,而且与python不同。

强大的并发性有助于构建优秀,可扩展,强大且容错的网络应用程序,而Erlang具备这些品质。我对python知之甚少,但据我所知,python中的并发性不如Erlang,请参阅下面的内容,了解为什么我这么说。

让我向您介绍一下Erlang和并发性的一些观点。

  1. Erlang使用 OTP库,这是一个非常受欢迎且有用的网络相关操作库。这是erlang被认为更适合网络应用的主要原因。
  2. 如果仔细而正确地实施,绿色线程比本机线程更好。据我所知, Erlang的绿色处理器(类似但比绿色线程更好)是轻量级的,也是最好的。 Erlang为进程调度提供了自己的实现,并且不使用操作系统来实现此目的,而大多数其他语言都依赖于操作系统。
  3. Erlang产生了 actors 的概念,这是绿色流程之上的另一种抽象。 Erlang可以创建数百万具有非常小的内存占用量的演员,这些演员通信异步,这意味着他们不需要锁定,因此在网络应用程序中表现更好。
  4. Erlang是最强的,容错。它提供了主管的概念,可以关注演员。如果任何一个演员未能履行其职责,那就是它与演员的主管交易。主管可以终止该演员并重新启动它,或者主管可以终止所有演员并重新启动。
  5. Erlang是一种功能性语言,固有的函数式语言更适合于并发性命令式(或任何其他范式)语言。其中一个原因是不变性,它消除了对竞争条件,死锁等的恐惧。
  6. 还有许多其他功能使Erlang非常适合并发,因此适用于网络应用程序。许多其他并发语言从Erlang中获取了基本上由Erlang引入的概念。

      

    演员模特是Erlang的秘密酱油

    那不是真的。 Scala(通过Akka)和许多其他语言(或库)支持演员(类似于Erlang)