Flow & GenStage
に関するJoséValimの最後の基調講演を見てから私は混乱しました。
1)Flow & GenStageがElixirに追加されているのは、並行性を改善することが本当に意味をなさないからです。
2)一方、Erlang/BEAMの重要な強みの1つは、すべてのコアをデフォルトで同時実行/使用していたことであり、開発者はそれを心配する必要はないということでした。
Flow & GenStage
が異なるマシン上で実行されている分散システムの助けにならない場合、誰かがFlow
とErlang/BEAMの同時実行の違いを説明できますか?なぜElixirは `Flow`を必要としますか? BEAMではデフォルトで処理されていませんか?
答えて
Flow
およびGenStage
は、並行性とは異なる問題を解決します。
分散システムで常に起こることは、一度簡単に並行性があれば、システム内の他のすべてのプロセスにとって、単一のプロセスまたは小さなプロセスグループがボトルネックになる「雷鳴」の問題に遭遇することです。このビデオは問題をはっきりと示しています。
Flow
とGenStage
の重要な概念は、労働者への着信要求のオーバーフローを防止するために、システム内の背圧です。このバックプレッシャーのコンセプトにより、労働者を追加したり、組立ラインを遅くすることができます。
これらのモジュールは、十分に大きなBEAMアプリケーションがすべて実行されるセルフスケジューリングの問題を一般化しようとしています。大量の負荷があってもBEAMアプリケーションが正常に機能しなくなるように、アイデアの実装はすでに多数ありました。
私は同意します。しかし、それは分散システムであり、JoséValimは、あなたが1台のマシンで1つのシステムについて話している場合を示しています。私は背圧の利点も理解しています。欠けているのはErlang/BEAMがErlangの重要な特徴として提示されている場合でも、これを処理する方法です。その作品は私が見逃すものです。 –
BEAMは、1台のマシンまたは100台のマシンで実行される分散システムです。 –
Erlang/BEAMのより一般的なアプローチの直接的で具体的な利点をとる技術の一部として、フローやGenStageを考えてみます。これらのテクニックは、使い方が悪いと結果が悪くなります。これらは、一連のアプリケーションおよびシナリオに合わせて調整されたツールです。 – dimitarvp
- 1. なぜflashplayerはJVMを必要としませんか?
- 2. なぜANSIBLEはデータベースを必要としませんか?
- 3. なぜこのメソッドはパラメータを必要としませんか?
- 4. なぜjsdomはスクリプトを処理しませんか?
- 5. アプリケーションでSQL入力が必要で、SQLで処理されないのはなぜですか?
- 6. なぜこのLINQは "FormatExceptionが処理されませんでした"をスローしますか?
- 7. Grailsのコントローラはデフォルトでトランザクション処理されますか?
- 8. なぜwritedump関数はcfscriptでセミコロンを必要としませんか?
- 9. なぜこのキャストはARCでブリッジングを必要としませんか?
- 10. 0が処理されないのはなぜですか?
- 11. "クラスにはデフォルトコンストラクタはありません"なぜそれが必要ですか?
- 12. arc()は処理3で描画されていません。
- 13. InvalidCastExceptionがCで処理されていませんでした
- 14. なぜこれはデフォルトのコンストラクタと見なされませんか?
- 15. html-pdf:cssとjsファイルは処理されていません
- 16. なぜいくつかのhttpsウェブサイトはocspクエリを必要としません
- 17. WebSocketがHTTPを使用してオープニングハンドシェイクを必要とするのはなぜですか?なぜそれは独立したプロトコルではありませんか?
- 18. Items_ItemAddプロシージャで処理されなかったメールを処理しています
- 19. なぜExcelは保護されていないとしても細胞を処理しますか?
- 20. Rails AJAXリクエストはJSとして処理されませんが、*/*
- 21. node.jsでhttpサーバのリクエスト処理オブジェクトで["/"]を処理する必要があるのはなぜですか?
- 22. Javaコンストラクタはデフォルトで公開されていませんか?
- 23. なぜテンプレートクラスをエクスポートする必要はありませんか?
- 24. なぜXAMLをコンパイルする必要はありませんか?
- 25. System.Web.Services.Protocols.SoapException:サーバーが要求を処理できませんでした - 装置が準備されていません
- 26. なぜRuntimeExceptionは明示的な例外処理を必要としないのですか?
- 27. なぜメッセージがパラメータを必要としないのかわかりません
- 28. C#代理人とはなぜ必要なのですか?
- 29. SQLiteExceptionsはORMLiteによって処理されませんか?
- 30. 「モデルはまだロードされていません」はなぜですか?
Erlangでは、与えられた「プロセス/ PID」に好きなだけ多くのメッセージを送信できますが、あまりに多く送信すると、VMによってキューに入れられ、メモリが詰まることがあります。これらのキューを管理することは、フローのステップである「黒い芸術」です。受信プロセス/ PIDが過負荷にならないようにします。 – GavinBrelstaff