Erlang은 동시 프로그래밍에서 경쟁 조건을 어떤 의미있는 방식으로 방지합니까?


11

Erlang의 동시성에 대해 읽으 면서 Akka 동시성 툴킷을 생각 나게한다 . 둘 다 경쟁 조건 을 방지하거나 제한하는 도구를 제공합니다 . 그러나 여전히 안전하지 않은 Akka 툴킷을 사용하여 변경 가능한 데이터에 대한 링크를 다른 프로세스로 보낼 수 있습니다. Akka를 유용한 도구로보고 있지만 경쟁 조건, 교착 상태 및 / 또는 기아로 이어지는 개체 및 데이터에 대한 비 순차적 액세스에 대한 보호 기능 은 제공하지 않습니다 . Java 또는 C #이 C ++로 작성할 수있는 대부분의 종류의 메모리 누수를 작성하는 것을 방지하는 방식으로 안전하지 않은 코드를 작성하지 못하게 막지는 않습니다 (가비지 수집기를 속여 Java에서 메모리 누수를 만들 수는 있음) 할당하는 모든 바이트를 해제해야한다는 것보다 문제가 있습니다).

Erlang은 동시 프로그래밍에서 어느 정도의 정확성, 성능 및 견고성을 보장합니까? 필자는 운영 체제가 시스템 리소스에 액세스 할 때 보호 기능을 제공한다고 생각합니다 (드라이버 작성자가 작업을 잘 수행했다고 가정). ACID 데이터베이스는 읽기 및 업데이트를 보호합니다. 따라서 이것이 해결 가능한 문제인 것 같습니다. 아니면 일반적인 안전한 솔루션이 동시성이 제공하는 성능 향상을 지우겠습니까? 다른 언어 나 툴킷은 Erlang이하는 (또는 그렇지 않은) 동시 안전을 제공합니까?

이것은 어떤 프로그래밍 언어가 찾기 어려운 버그를 가장 적게 생성 하는가 에 대한 @ user1249의 답변에 대한 @Malfist의 의견 에 대한 후속 질문입니다 . .

답변:


19

Erlang이이를 돕기 위해 몇 가지 작업을 수행합니다.

  • 데이터는 불변이므로 데이터 경쟁이 없습니다
  • OTP gen_servers 및 gen_fsm은 서버에 대해 매우 잘 테스트 된 패턴을 제공합니다.
  • 관리자는 충돌로부터 복구 할 수 있습니다
  • 공정이 작고 저렴하다
  • 프로세스 당 메모리가 할당됩니다 (GC 동결 없음)
  • erlang VM은 매우 무거운 부하에서 작동하도록 최적화되어 있습니다.
  • 소프트웨어를 즉시 업데이트 할 수 있으므로 업그레이드 중단 시간이 없습니다.

여기서 중요한 것은 Erlang에는 잠금이 필요한 공유 상태가 없으므로 잠금이 필요하지 않다는 것입니다. 다운 타임이나 높은 내결함성 및 동시성이 필요없는 소프트 실시간 애플리케이션을위한 뛰어난 언어입니다.


12
@JarrodRoberson : 사실, 요점은 공유 가능한 변경 가능한 상태아닙니다 . 변경하지 않으면 공유 상태는 문제가되지 않습니다. 공유 할 수없는 경우 가변 상태는 문제가되지 않습니다.
Jörg W Mittag

1
새로운 이벤트 Concuerror youtube.com/watch?v=FpkjKN9wTKg 도 있습니다. 모든 가능한 이벤트 순서로 테스트를 실행할 수 있습니다
Zachary K
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.