2011-08-02 29 views
5

Scala ve Akka’da yeniyim ve bir sorunu çözmek için kullanmayı düşünüyorum. Bir hesaplama motorum var (bir çözüm arar). Her bir düğümün kendi motor örneğine her bir cpu vererek, bu aramayı hem cpus hem de düğümler arasında paralel hale getirmek isterim.scala/akka/stm tasarımı?

Motor girişleri az sayıda skaler giriş ve çok büyük bir karma tabladan oluşur. Her bir motor örneği, skaler girişlerini hash tablosunda küçük bir yerel değişiklik yapmak, bir iyilik hesaplamak ve daha sonra değişikliklerini atmak için kullanır (başka herhangi bir motor örneği tarafından görülmesi/görülmesi gerekmez). İyilik değeri, sonuçlar arasından seçim yapacak bazı koordinatörlere geri verilecekti.

Paylaşılan durum için bir araç olarak STM TransactionalMap hakkında bazılarını okuyordum. Bu ideal görünüyor, ancak paylaşılan durum olarak onu kullanarak tam bir örnek görmüyorum.

Sorular:

  • aktör/stm modeli Bu sorunun doğru görünüyor mu?
  • Paylaşılan durumu dağıtma konusunda belirli bir örnek gösterebilir misiniz? (Bu Ref [TransactionalMap [,]] gibi bir mesajdır?
  • farklı düğümlere karşı bir düğüm içinde paylaşılan durumunu dağıtma konusunda farklı bir şey var mı? Sorulması Minds bilin ister

,

Eğer karma tablosu paylaşılan kopyasına işlemeye motor durumlarda yapılan değişiklikleri istemiyoruz çünkü burada doğru çözüm olacağını STM gibi gelmiyor paylaşılan hafıza sokulması açısından

Allan

cevap

1

.

Bunun yerine, bir immutable HashMap daha uygun olabilir. Haritada değişmeyen elemanlar, sadece her bir haritadaki ek bellek alanıyla farklılıklar göstererek motor örnekleri tarafından paylaşılabilir.

Oyuncu modeli yapmak istediğiniz şeyi çok iyi uyacaktır. İstediğiniz her bir motor örneği için bir aktör oluşturun ve skaler değerlerle ve hashmap ile bir mesaj iletin. Ardından sonuçları koordinatöre iade edin.