Erlangはどのような意味のある方法で並行プログラミングの競合状態を防ぎますか?


11

Erlangの並行性について読むと、Akka並行性ツールキットを思い出します。どちらも、競合状態を防止または制限するツールを提供します。ただし、Akkaツールキットを使用すると、可変データへのリンクを他のプロセスに送信できますが、これはまだ安全ではありません。Akkaは便利なツールであると考えていますが、競合状態、デッドロック、飢starにつながるオブジェクトやデータへの順不同のアクセスに対する保護は提供しません。JavaまたはC#がC ++で記述できるほとんどの種類のメモリリークの書き込みから保護する方法で、安全でないコードを書くことを妨げません(ガベージコレクターをだましてJavaでメモリリークを作成できますが、割り当てたすべてのバイトを解放することを覚えておく必要があるよりも問題があります)。

Erlangは、並行プログラミングのある程度の正確性、パフォーマンス、および堅牢性を保証しますか?オペレーティングシステムは、システムリソースにアクセスするときに保護を提供すると思います(ドライバーライターが仕事を上手く行ったと仮定)。ACIDデータベースは、読み取りと更新の保護を提供します。これは解決可能な問題のようです。または、一般的な安全なソリューションは、並行性が提供するパフォーマンスの向上を消去しますか?他の言語またはツールキットは、Erlangが提供する(または提供しない)並行安全性を提供しますか?

これは、どのプログラミング言語が見つけにくいバグをほとんど生成しないに対する@ user1249の回答に対する@Malfistのコメントに対する追加の質問ですか?

回答:


19

これらを支援するためにErlangが行うことはいくつかあります。

  • データは不変なので、データの競合はありません
  • OTP gen_serversおよびgen_fsmは、サーバーに対して非常によくテストされたパターンを提供します
  • スーパーバイザはクラッシュからの回復を可能にします
  • プロセスは小さくて安価です
  • メモリはプロセスごとに割り当てられます(GCがフリーズしない)
  • アーランVMは、非常に重い負荷の下で動作するように最適化されています
  • ソフトウェアはその場で更新できるため、アップグレードのダウンタイムはありません

ここでの主なことは、Erlangにはロックを必要とする可能性のある共有状態がないため、ロックの必要がないことです。ダウンタイムや高いフォールトトレランスと同時実行性を必要としないソフトリアルタイムアプリケーションに最適な言語です。


12
@JarrodRoberson:実際には、主要なポイントは共有可能な可変状態ではありません。状態を変更しない限り、状態の共有は問題ありません。可変状態は、共有しなくても問題ありません。
ヨルグWミットタグ

1
新しいツールConcuerrorもありyoutube.com/watch?v=FpkjKN9wTKgあなたはすべての可能なイベント順序付けを使用してテストを実行することができます
ザカリーK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.