Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python用于类似Erlang的东西:哪里去了?_Python_Multithreading_Concurrency_Distributed_Agent - Fatal编程技术网

将Python用于类似Erlang的东西:哪里去了?

将Python用于类似Erlang的东西:哪里去了?,python,multithreading,concurrency,distributed,agent,Python,Multithreading,Concurrency,Distributed,Agent,我还不太了解它,但我听说Erlang在处理网络应用程序方面有点特殊;据我所知,这来自一些早期的设计决策,这些决策允许it以有限的开销拥有数千个并发进程 我本质上是一名python程序员,最近我喜欢使用0mq进行分布式计算,直到我遇到批评 Erlang对网络/并发性有什么特别之处?哪个python库或一组库试图复制/替换它的哪些部分?我在理解/如何/如何/将这些项目与分布式网络编程图相匹配时遇到困难: python的0mq包装器 无堆栈python 扭曲蟒蛇 龙卷风 (我知道芹菜和Rabbit

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

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

Erlang对网络/并发性有什么特别之处?哪个python库或一组库试图复制/替换它的哪些部分?我在理解/如何/如何/将这些项目与分布式网络编程图相匹配时遇到困难:

  • python的0mq包装器
  • 无堆栈python
  • 扭曲蟒蛇
  • 龙卷风
(我知道芹菜和RabbitMQ在消息传递方面略有不同,但它们要求使用队列系统,这是一种特殊类型的分布式计算。)这些“映射”到哪些功能,以及何时使用它们

我还回顾了以下内容:

  • 这是2岁
  • 假设演员模型是Erlang的秘密酱汁——我不知道这个假设是否正确

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

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

      强大的并发性有助于使优秀、可扩展、健壮和容错的网络应用程序和Erlang具备这些特性。我对python知之甚少,但据我所知,python中的并发性不如Erlang好,请参阅下面的要点,了解我为什么这么说

      让我向您介绍关于Erlang和并发性的几点

    • Erlang使用OTP库,这是一个非常流行和有用的网络相关操作库。这是erlang被认为更适合网络应用的主要原因
    • 如果仔细且正确地实现,绿色线程比本机线程更好。据我所知,Erlang的绿色处理器(类似但优于绿色线程)是轻量级和最佳的。Erlang为进程调度提供了自己的实现,并且不使用操作系统,而大多数其他语言都依赖操作系统
    • Erlang提出了参与者的概念,这是绿色流程之上的另一个抽象概念。Erlang可以用非常小的内存足迹创建数以百万计的参与者,这些参与者异步通信,这意味着他们不需要锁,因此在网络应用程序中性能更好
    • Erlang是roust和容错的。它提供了监督人的概念,监督人关注演员。如果任何演员未能履行其职责,则由其主管与演员打交道。主管可以终止该参与者并重新启动它,也可以终止其所有参与者并重新启动
    • Erlang是一种函数式语言,固有的函数式语言比命令式(或任何其他范式)语言更适合并发。其中一个原因是不变性,它消除了对竞争条件、死锁等的恐惧
    • 还有许多其他特性使Erlang非常适合于并发,因此也适用于网络应用程序。许多其他并发语言从Erlang中获得了基本上由Erlang引入的概念

      演员模型是二郎的秘方


      那不是真的。Scala(由Akka提供)和许多其他语言(或库)支持参与者(类似于Erlang)

      我建议将其分解为更为集中的问题。目前,它的范围如此之广,几乎没有人可能解决它。试着问一个关于Erlang、芹菜/RabbitMQ、龙卷风或演员模型的特定问题。@PaulBissex,你会对人们可能要解决的问题感到惊讶。我不确定你在暗示什么。希望在问题发布后的20个月内,没有一个答案能够反驳我的观点。不变性消除了对种族条件的恐惧,嗯,我是一个erlang初学者,但“erlang编程”有一节描述了种族条件如何在erlang中发生,提供了一个例子,并提到1996年有人在一些Erlang库代码中发现了类似的竞争条件,并得出结论,竞争条件是一种永远存在的危险,您必须注意。不变性意味着您永远不会改变对象的状态。对象创建后将是只读的。当以错误的顺序修改(然后读取)对象时,会发生争用条件。因此,在比赛条件下,没有修改。Clojure就是这样构建它的架构的——避免竞争条件——当对象以错误的顺序修改(然后读取)时,竞争条件就会发生。根据我对“编程Erlang”一节的阅读“,当函数返回的结果与代码按顺序执行时的结果不同时,会出现竞态条件……比这更糟糕的是:当函数的返回值无法确定地预测时,即函数的非确定性时,会出现竞态条件。”。假设,你可以运行函数并发送相同的参数1000次,结果可能是相同的……但是如果你对可能发生的情况进行推理,那么函数可能会返回不同的结果——因为两个进程正在竞相执行同一行代码,而你无法确定哪个进程