パイソン vs.Java — 同時プログラミングを行うにはどれを選びますか?その理由は何ですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/1861457

質問

また、Python や Java ではない場合、一般的には静的型言語と動的型言語のどちらを選択しますか?

役に立ちましたか?

解決

私はPythonでマルチスレッドをグローバルインタープリタロックによって妨害された主な理由は、pythonの上でJVMを選ぶだろうに。しかし、JavaはJVM上で動作しているとき、あなたの最高になることはほとんどありません。 Clojureののか、スカラする(使用アクター)は、両方のマルチスレッドの問題に適しである可能性がある。

あなたは、Javaを選択した場合は、

あなたは java.util.concurrentののライブラリとのようなマルチスレッドプリミティブを避けるための同期の。

他のヒント

Definetely StacklessのPythonのに! Pythonの変異体は、特に並行処理のために作られていること。

しかし、最終的にそれはあなたのターゲットプラットフォームと何を達成しようとしているに依存します。

同時実行のために、私は、Javaを使用します。使用Javaのことで、私は実際にはおそらく(アーランの同時実行性の構築物から多くを借りて、しかしである、 Scalaのの意味しますどちらかの前に使用したことのないJava開発者への)よりアクセスします。

PythonのスレッドはCPUバウンドのプログラムのために達成不可能(単一プロセス内の)真の同時実行を行う、グローバルインタープリタロックを待つことに苦しんでいます。私は理解しているように、スタックレスPythonはいくつかを解決し(ただし全てではない)はCPythonの並行処理の不備のが、私はそれを使用していないとして、私は本当にそれについて助言することはできません。

この議論は、言語の選択や静的型付けまたは動的型付けに関するものではないと思います。それは、共有メモリとメッセージ パッシングという 2 つの同時実行モデルの間の問題です。あなたの状況ではどちらのモデルがより理にかなっていますか?また、選択した言語では選択が可能ですか、それともどちらかのモデルを採用する必要がありますか?

ぜひご覧になってみてはいかがでしょうか アーラン (動的型付けを備えています) メッセージパッシング, 、 俳優モデル, 、その理由を読んでください ジョー・アームストロングは共有メモリを好まない. 。ロックとスレッドを使用した Java の同時実行性に関する興味深い議論もあります。 ここSO.

Python については知りませんが、Java には、組み込みのロックとスレッド モデルとともに、と呼ばれるメッセージ受け渡しフレームワークがあります。 キリム.

のJava / Pythonのない場合は、アカウントに副作用を服用すると、並行ソフトウェアを書くの複雑さの一つですので、私はのの関数型言語のために行くだろう。 (限り、あなたの質問が行くように:これは、静的な型指定されたことを起こるが、コンパイラは、ほとんどの時間をinfered)

私はそれを使用して簡単に同時ソフトウェアを書くの素晴らしい例をたくさん見てきたので、

個人的に私は、F#のを選ぶだろう。

導入など:この男は感動としても同様に楽しいですあなたはどのようなので、今までのF#に興味を持っていない場合に、でも見ている必要があります。

私なら Jython 経由で Java を使用します。Java には強力なスレッド機能があり、Jython で Python 構文を使用して作成できるため、2 つの利点を最大限に活用できます。

Python 自体は同時実行性があまり優れておらず、とにかく Java よりも遅いです。

しかし、同時実行の問題や手が空いている場合は、Erlang を検討してみてください。Erlang はそのような問題に対応するように設計されているからです。もちろん、Erlang を考慮する必要があるのは、次の場合に限られます。

  • (非常に)新しいテクノロジーを習得する時が来た
  • 生産チェーンの合理的な部分での制御。Erland では、それに適合するようにツールボックスにいくつかの調整が必要なため、

どちらでもない。同時プログラミングは、正しく行うことが難しいことで知られています。次のようなプロセス指向プログラミング言語を使用するオプションがあります。 オカンピ という考えに基づいています 一連のプロセスを伝達する そしてその 円周率計算. 。これにより、同時システム開発中に発生するデッドロックやその他の多くの問題をコンパイル時にチェックできるようになります。オッカムピが気に入らない場合は、それを責めることはできませんが、試してみてください 行く CSP のバージョンも実装する Google の新しい言語。

いくつかのタスクでは、Pythonは遅すぎます。あなたのシングルスレッドのJavaプログラムは、マルチコアコンピュータ上のPythonの同時バージョンよりも速いかもしれない...

私は、JavaやScalaのを使用したいF#または単にC ++(MPIおよびOpenMPIの)に行くと思います。

Java環境(JVM +ライブラリ)は、(C)はPythonよりも同時実行のためのより良いですが、Java言語で吸います。 Jythonのは、既に述べた、とのClojureとScalaは両方の同時実行のための優れたサポートを持っている - 私はおそらくJVM上で別の言語を使用して行くだろう。

のClojureは特に良いです - それは、高性能の永続的なデータ構造、エージェントおよびソフトウェアトランザクショナルメモリをサポートしています。これは、動的言語ですが、それは、Javaのように良好なパフォーマンスを得るためのヒントを入力与えることができます。

リチャード・ヒッキーではInfoQにこのビデオを見ます(並行処理への従来のアプローチで問題にClojureのの生みの親)、そしてどのようにClojureのは、それを処理します。

私はObjective-Cのと基礎フレームワークを見てみたいです。非同期、並行プログラミングは十分に提供されます。

これはもちろん、あなたのAppleの開発者ツールへのアクセスやGNUstepのに依存しますが、あなたはそれが並行プログラミングを奪うルートのいずれかへのアクセス権を持っている場合。

答えは、それが依存していることです。たとえば、あなたは、単一のマシンに複数のコアやCPUを活用しようとしているか、あなたは多くのマシン間でタスクを分散するために欠けていますか?実装の容易さ対速度がどのように重要なのですか?

前に述べたように、Pythonはグローバルインタプリタロックを持っていますが、マルチプロセッシングモジュール。なお、しばらくスタックレスのは非常にクールですが、それはアーランするまたは Scalaのアクターはを。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top