これについても同様の質問がありましたが、正確に同じ質問では尋ねられませんでした。Erlang 'catch'式と効率の点でtry/catchを比較
私は、入力がバイナリ、またはbase64エンコードされていない可能性があるコンテキストで、base64バイナリを安全にデコードしようとしています。
Erlangは、クラッシュさせて処理するように言います。もしこれを行うなら、最も効率的な方法は何ですか。このシステムでは効率が非常に重要です。
私は、完全なスタックトレースを構築するので、try/catchを避けることを知っていますが、このコンテキストでは合理的なcatchキーワードですか? catchキーワードはより速く/より効率的ですか?このよう
safe_decode(Binary) ->
case catch base64:decode(Binary) of
<<Result/binary>> -> {ok, Result};
{'EXIT', _} -> {not_base64, Binary}
end.
としての機能で
は、tryキャッチよりも、この真のより効率的ですか?効率が重要なシステム、すなわちスタックトレースを構築することおよび/またはハッピーパスよりも多くの処理を必要とするクラッシュは、可能な限り効率的に処理する必要があるシステムにおいて、このシナリオをどのように処理するのが最適か。
私はちょうどerlangを学んでいるので、おそらく答えは私の顔を見ている。
です面白い - ありがとう! –
'spawn_monitor'には痛みを伴わないクラッシュ可能なプロセスが必要です。このプロセスは、' try..catch'の狂気を奨励することなく、成功のメッセージや死亡ノート(モニター)を直ちに失敗に送るでしょう。 *ときどき*これは理想的な解決策です。時々そうではない。いつものように、ベンチマーク。あなたが悪い入力データの*ロット*をキャッチしている場合、クラッシュはより軽い負荷かもしれません。あなたの入力データの99%が良いなら、 'try..catch'がおそらく良いでしょう。 – zxq9