另外,如果不是 python 或 java,那么您通常会选择静态类型语言还是动态类型语言?

有帮助吗?

解决方案

我会选择JVM过蟒蛇,这主要是因为在Python多线程是由全局解释器锁阻碍。然而,Java是不可能运行在JVM上时,是你最好的。 Clojure的(使用行为者)都可能是更适合于多线程的问题。

如果你选择Java中,你应该考虑使用 <强> java.util.concurrent中 库和避免多线程的原语,如的同步

其他提示

无堆栈的Python !这一个Python变种尤其是并发制造。

但最终它取决于你的目标平台和你想要达到的目的上。

有关的并发性,我会使用Java。通过使用Java,我实际上意味着斯卡拉,该借鉴了很多Erlang的并发构造,但(可能)要么谁之前从未使用过的Java开发者更容易获得。

的Python线程不必等待全局解释器锁,使得(一个单一的过程中)真正并发无法实现为CPU结合的程序受到损害。据我所知,无堆栈的Python解决一些(但不是全部)的CPython的并发缺陷,但我没有用它,我真的不能建议就可以了。

我不认为争论与语言选择或静态或动态类型有关 - 它是在两种并发模型之间 - 共享内存和消息传递。哪种模型在您的情况下更有意义?您选择的语言是否允许您做出选择,或者您被迫采用一种模型而不是另一种模型?

为什么不看看 埃尔兰 (具有动态类型)和 消息传递, , 这 演员模型, ,并阅读原因 乔·阿姆斯特朗不喜欢共享内存. 。还有一个关于使用锁和线程的 java 并发性的有趣讨论 这里就这样.

我不了解Python,但Java以及内置的锁和线程模型有一个消息传递框架,称为 基里姆.

如果不是Java / Python的我会去一个函数式语言自从服用副作用考虑是编写并发软件的复杂性之一。 (至于你的问题有云:这一次恰好是静打字,但是编译器infered大部分时间)

我个人会选择F#,因为我已经看到了很多用它编写并发软件轻松的很好的例子。

作为引言:这个人是鼓舞人心同样有趣,甚至是必须有,如果你不感兴趣的F#什么,所以见过。

我会通过 Jython 使用 Java。Java 具有强大的线程功能,并且可以使用 Python 语法和 Jython 来编写它,因此您可以两全其美。

Python 本身在并发方面并不是很好,而且比 Java 慢。

但如果你有并发问题并且可以腾出手来,我会看看 Erlang,因为它是为此类问题而设计的。当然,只有当你满足以下条件时,你才必须考虑 Erlang:

  • 是时候掌握一项(非常)新技术了
  • 控制生产链的合理部分,因为 Erland 需要在你的工具箱中进行一些调整以适应

两者都不。众所周知,并发编程很难正确。可以选择使用面向过程的编程语言,例如 奥坎皮 这是基于的想法 通信顺序进程pi 演算. 。这允许编译时检查并发系统开发过程中出现的死锁和许多其他问题。如果你不喜欢 occam-pi,如果你不喜欢,我不能责怪你,你可以尝试 来自 google 的新语言,它也实现了 CSP 版本。

有关某些任务,Python是太慢了。你单线程的Java程序可能会比Python的多核电脑...

在并发版本快

我想使用Java或Scala中,F#或简单地转到C ++(MPI和的openmpi)。

在Java环境(JVM +库)是用于并发比(C)的Python更好,但是Java中的语言吸收。我可能会去与在JVM上另一种语言 - Jython中已经提到,Clojure的和和Scala都有并发出色的支持。

Clojure是特别好 - 它具有用于高性能持久数据结构,活性剂和软件事务存储器支持。它是一个动态的语言,但你可以给它输入提示,以获得性能的Java一样好。

观看由Richard希基相关的这个视频(与传统方法的并发性,以及如何Clojure的处理它的问题的Clojure的创建者)。

我想看看在Objective-C和基础框架。异步的,并发编程是公规定。

这当然取决于你的访问苹果的开发工具或GNUstep的,但如果你有机会到任何一个它是采取与并发编程一个很好的途径。

答案是,这取决于情况。例如,您是否正在尝试利用单台计算机上的多个核心或 cpu,或者您是否希望将任务分布在多台计算机上?速度与速度有多重要易于实施吗?

如前所述,Python 有全局解释器锁,但您可以使用 多重处理 模块。请注意,虽然 无堆栈 非常酷,它 不会利用多核 在其自己的。人们通常认为 Python 比 Java 更容易使用。如果速度是优先考虑的,Java 通常会更快。

java.util.concurrent Java 中的库使在单台机器上编写并发应用程序变得更简单,但您仍然需要围绕任何共享状态进行同步。虽然 Java 不一定是并发性的最佳语言,但有很多工具、库、文档和最佳实践可以提供帮助。

使用消息传递和不变性而不是线程和共享状态被认为是编程并发应用程序的更好方法。因此,阻止可变性和副作用的函数式语言通常是首选。如果需要将并发应用程序分布在多台机器上,那么值得考虑为此设计的运行时,例如 埃尔兰 或者 斯卡拉演员.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top