2011-08-02 5 views
5

저는 Scala와 Akka를 처음 사용하고 있으며 문제를 해결하기 위해 그것을 사용하는 것을 고려하고 있습니다. 계산 엔진 (솔루션을 검색하는)이 있다고 가정합니다. 각 노드에 각 CPU 인스턴스에 자체 엔진 인스턴스를 제공하여 CPU 및 노드 간 검색을 병렬화하고 싶습니다.큰 공유 상태를위한 scala/akka/stm 디자인?

엔진 입력은 소수의 스칼라 입력과 매우 큰 해시 테이블로 구성됩니다. 각 엔진 인스턴스는 스칼라 입력을 사용하여 해쉬 테이블에 대해 약간의 로컬 변경을 수행하고 선량을 계산 한 다음 변경 사항을 버립니다 (다른 엔진 인스턴스가 커밋하거나 볼 필요가 없음). goodness 값은 결과 중 하나를 선택할 코디네이터에게 반환됩니다.

STM TransactionalMap에 대한 정보는 공유 상태를위한 수단으로 읽었습니다. 이것은 이상적으로 보이지만 공유 상태로 사용하는 완전한 예제는 실제로 볼 수 없습니다.

질문 :

  • 는 배우/STM 모델은이 문제에 대해 잘 보이는가?
  • 공유 상태를 배포하는 방법에 대한 구체적인 예를 보여줄 수 있습니까? (이 참조 [TransactionalMap [,]]와 같은 메시지인가?
  • 다른 노드에에 반대 노드에서 공유 상태를 배포에 대해 다른 있나요? 미심쩍은 마음을 알고 싶어

,

당신이 해시 테이블의 공유 복사본에 커밋 엔진 인스턴스에서 변경을 원하지 않기 때문에 여기에 잘 맞는 것 STM 같은 소리하지 않습니다 공유 메모리 처리 측면에서

앨런

답변

1

.

대신 immutable HashMap이 더 적합 할 수 있습니다. 맵에서 변경되지 않는 요소는 엔진 인스턴스에서 공유 할 수 있으며 각 맵의 차이점만으로 추가 메모리 공간을 사용합니다.

배우 모델이 원하는대로 잘 맞을 것입니다. 원하는 각 엔진 인스턴스에 대해 하나의 액터를 설정하고 스칼라 값과 해시 맵이있는 메시지를 전달하십시오. 그런 다음 코디네이터에게 결과를 돌려 보냅니다.

관련 문제