Python 对比Java——您会选择哪个来进行并发编程,为什么?[关闭]
-
13-09-2019 - |
题
另外,如果不是 python 或 java,那么您通常会选择静态类型语言还是动态类型语言?
解决方案
我会选择JVM过蟒蛇,这主要是因为在Python多线程是由全局解释器锁阻碍。然而,Java是不可能运行在JVM上时,是你最好的。 Clojure的或阶(使用行为者)都可能是更适合于多线程的问题。
如果你选择Java中,你应该考虑使用 <强> java.util.concurrent中强> 库和避免多线程的原语,如的同步强>
其他提示
无堆栈的Python !这一个Python变种尤其是并发制造。
但最终它取决于你的目标平台和你想要达到的目的上。
有关的并发性,我会使用Java。通过使用Java,我实际上意味着斯卡拉,该借鉴了很多Erlang的并发构造,但(可能)要么谁之前从未使用过的Java开发者更容易获得。
的Python线程不必等待全局解释器锁,使得(一个单一的过程中)真正并发无法实现为CPU结合的程序受到损害。据我所知,无堆栈的Python解决一些(但不是全部)的CPython的并发缺陷,但我没有用它,我真的不能建议就可以了。
如果不是Java / Python的我会去一个函数式语言自从服用副作用考虑是编写并发软件的复杂性之一。 (至于你的问题有云:这一次恰好是静打字,但是编译器infered大部分时间)
我个人会选择F#,因为我已经看到了很多用它编写并发软件轻松的很好的例子。
作为引言:这个人是鼓舞人心同样有趣,甚至是必须有,如果你不感兴趣的F#什么,所以见过。
我会通过 Jython 使用 Java。Java 具有强大的线程功能,并且可以使用 Python 语法和 Jython 来编写它,因此您可以两全其美。
Python 本身在并发方面并不是很好,而且比 Java 慢。
但如果你有并发问题并且可以腾出手来,我会看看 Erlang,因为它是为此类问题而设计的。当然,只有当你满足以下条件时,你才必须考虑 Erlang:
- 是时候掌握一项(非常)新技术了
- 控制生产链的合理部分,因为 Erland 需要在你的工具箱中进行一些调整以适应
有关某些任务,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 不一定是并发性的最佳语言,但有很多工具、库、文档和最佳实践可以提供帮助。
使用消息传递和不变性而不是线程和共享状态被认为是编程并发应用程序的更好方法。因此,阻止可变性和副作用的函数式语言通常是首选。如果需要将并发应用程序分布在多台机器上,那么值得考虑为此设计的运行时,例如 埃尔兰 或者 斯卡拉演员.