7

현재 프로그래밍 언어의 설계 단계에 있으며 동시성 측면에 대해 현재 생각하고 있습니다. consistency model을 알아야합니다. 즉,이 언어로 프로그래밍 된 동시 프로세스로 데이터를 처리하는 방법입니다. 나는 일관성 모델이 좋은 스케일링을 허용만큼, 사용 편의성 성능 이상을 선호동시 프로그래밍 언어의 일관성 모델 선택

  • I 차단 또는 동적 요구하는 일관성 모델을 사용할 수 없습니다

    두 가지 중요한 기준이 있습니다 메모리 할당.

내 두 후보는 바로 지금 비 차단 한쪽에 소프트웨어 트랜잭션 메모리, 그리고 복사 얼랑을 공유하지 않고 의미를 메시지 전달.

나는 특히 사용의 용이성에 대해 걱정하기 때문에이 두 모델 각각에 대한 주요 주장을 제시 할 것입니다.

STM의 경우 사용자는 어떤 클래스의 멤버가 원자 적으로 변이하고 원자 코드 섹션을 정확하게 구분해야 하는지를 이해해야합니다. 이것들은 정의되지 않은 횟수만큼 반복 될 수 있도록 작성되어야하며, I/O를 수행하지 않을 수도 있고, 일부 외국 함수를 호출하지 않을 수도 있습니다. 필자는 경험이없는 프로그래머가 이것을 쉽게 볼 수 있습니다.

Erlang 스타일의 공유 없음 동시성은 매력적이지만 catch가 있습니다. 실시간 프로세스는 메모리 할당을 수행 할 수 없기 때문에 실시간으로 프로세스가 객체를 복사 할 수 없으므로 객체는 하나에서 "이동"해야합니다 큐를 통해 다른 프로세스로 전송할 수 있습니다. 사용자는 하나의 실시간 프로세스에 객체에 대한 참조가 두 개있는 경우 객체를 다른 프로세스로 전송하면 해당 참조가 모두 지워진다는 사실을 알아야합니다. 이 포인터는 사용 시점에 null 일 수도 있고 아닐 수도있는 약한 포인터와 비슷합니다. 놀라운 일입니다.

필자는 이해하기 쉽고 자연스럽게 분산 시스템으로 확장되기 때문에 필자는 두 번째 모델을 선호합니다.

무엇이 좋습니다?

  • 비 차단 소프트웨어 트랜잭션 메모리?
  • 실시간 제약 조건이있는 얼랑 스타일의 동시성?
  • 다른 건 제가 고려하지 않았습니까?

답변

2

나는 Erlang과 거의 관계가 없지만 공유가없는 메시지 전달 패러다임은 새로운 것이지만 시각적 및 물리적 측면에서 이해하기 쉽다.

당신의 언어가 널리 퍼지려면, 얼랑 스타일이 적어도 내 마음을 너무 많은 노력없이 감쌀 수 있다는 말입니다. 나는 다른 사람들이 STM 방법보다 쉽게 ​​그런 종류의 모델을 배우고 적용 할 수 있다고 가정한다.

나는 경험이 없지만 Erlang 모델을 구현하는 것이 더 쉬운 것처럼 보입니다. 저수준 메모리 작업을 많이 처리 할 필요가 없기 때문에 아무 것도 공유하지 않고 관리 할 수 ​​있습니다 프로세스간에 메모리가 전달됩니다.

1

단일 패러다임이 모든 문제를 해결하고 호환되지 않는다고 생각하지 않습니다. 예를 들어 한 응용 프로그램은 프로그램의 일부에서 메시지 전달 인터페이스를 사용하고 다른 부분에서는 STM을 사용하고 다른 특정 부분에서는 직접 잠금을 사용할 수 있습니다.

메시지 전달 인터페이스의 변형으로 간주 될 수있는 결합법 (JoCaml, Boost.Join)을 살펴볼 수도 있습니다.

관련 문제