비슷한 질문이 비슷한 질문을 받았지만 정확히 같은 질문이 아닙니다.Erlang 'catch'식 대 효율성의 관점에서 시도/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.
는 시도 캐치 이상이 진정으로 더 효율적인가요? 효율성이 중요시되는 시스템, 즉 스택 추적을 구축하거나 해피 경로보다 더 많은 처리를 요구하는 충돌이 가능한 한 효율적으로 처리되어야하는 시스템에서이 시나리오를 처리하는 가장 좋은 방법.
나는 방금 erlang을 배우기 때문에, 아마도 그 답은 저를 쳐다보고 있습니다.
매우 흥미 롭습니다 - 고마워요! –
'spawn_monitor' 또한 통증이없이 충돌 가능한 프로세스를 사용하여 "try..catch"라는 광기를 느끼지 않고 곧바로 실패 메시지 (성공) 또는 사망 노트 (모니터)를 보낼 수 있습니다. * 때때로 * 이상적인 해결책입니다. 때로는 그렇지 않습니다. 언제나 그렇듯이 벤치 마크. * 나쁜 * 입력 데이터를 잡는다면 크래시가 더 가벼울 수 있습니다. 입력 데이터의 99 %가 양호하다면,'try..catch'가 아마도 더 좋습니다. – zxq9