SORU
9 AĞUSTOS 2009, Pazar


Scala aktörler: vs tepki alırsınız

Bana Java bir çok deneyim var oldukça bu ilk, ama son zamanlarda sadece işlevsel diller ile ilgilenen haline gelmiştir izin. Son zamanlarda çok güzel bir dil gibi görünüyor Scala, bakmaya başladım.

Ancak, Programming in Scala, Scala Aktör çerçeve hakkında çok şey okudum ve anlamadığım bir şey var. Bölüm 30.4 react yerine receive kullanarak konuları pahalı olduğundan bu performans için iyi olan, yeniden kullanım konuları, mümkün JVM yapar diyor.

Bu, receive yerine react aramak için hatırlıyorum sürece istediğim kadar birçok Aktör başlayabilirim anlamına mı geliyor? Scala fark etmeden, eğer X ile oynuyorum, ve Programming Erlang yazar zorlanmadan 200.000 süreçleri yumurtlama hakkında sahiptir. Java iş parçacıkları ile bunu yapmak istemem. Ne tür sınırlar bakarak Scala olarak eğer X (ve) Java karşılaştırıldığında mıyım?

Ayrıca, nasıl bu konuyu yeniden kullanım Scala çalışır? Hadi tek bir konu var, basitlik için varsayalım. Ben bu konuyu sırayla Çalıştır veya görev anahtarlama bir çeşit yer alacak tüm aktörler olacak? Örneğin, eğer ping-pong birbirlerine mesajlar Bu iki aktör başlarsam, aynı konuya devam ediyorlar. eğer kilitlenme göze alabilecek miyim?

GöreScala programlamaaktörler react receive ile daha zor kullanmak için yazıyorum. Bu react dönüş olmadığından makul geliyor. Ancak, kitabın bir döngü Actor.loop ile react nasıl göstermek için yanar. Sonuç olarak, elde

loop {
    react {
        ...
    }
}

benim için oldukça benzer görünüyor

while (true) {
    receive {
        ...
    }
}

önceki kitapta kullanılan. Yine de, kitabı yazan "uygulamada, programlar en azından bir kaç receivegerekir'". s Burada neyi kaçırıyorum? receive react bunu yapamaz, geri dönmek dışında ne olabilir? Ve neden umursayayım?

Son olarak anlamadığım şey özüne gelecek: kitap react kullanarak mümkün aramayı yeniden kullanmak için bir yığın atmak için yapar nasıl bahsediyor iplik. Nasıl çalışır? Neden atmak için gerekli çağrı yığını mı? Ve neden iade (receive) tarafından sonlandırıldığında, bir arama işlevi, bir istisna (react) atarak sonlandırıldığında, ama atılacak yığını olabilir?

İzlenim varScala programlamane yazık ki önemli konuları burada, bazı Parlatıcı, yoksa gerçekten mükemmel bir kitap çünkü.

CEVAP
9 AĞUSTOS 2009, Pazar


İlk olarak, her bir aktör receive bekleyen işgal eden bir konu. Eğer hiç bir şey alırsa, bu iş parçacığı asla her şeyi yapar. react aktör bir şey alıncaya kadar herhangi bir iş parçacığı işgal etmez. Bir şey aldıktan sonra, bir iş parçacığı için ayrılmış alır ve başlatılır.

Şimdi, başlatma kısmı önemli. Alıcı bir iş parçacığı bir şey geri dönmek için beklenen tepki bir konu değil. Önceki react en son sonunda devlet yığın, ve, tamamen göz ardı edilir. Kaydedin veya devlet yığın geri gerek yok bu iş parçacığı başlatmak için daha hızlı yapar.

Bir veya diğer isteyebilirsiniz neden çeşitli performans nedeni vardır. Bildiğiniz gibi, Java çok fazla konu olması iyi bir fikir değil. Önce bir iş parçacığı için bir aktör eklemek gerekiyor, çünkü diğer taraftan, react daha hızlı receive ileti react. Eğer çok mesaj alıyorsunuz ama az çok bu aktörler varsa, react ek gecikme amaçlarınız için çok yavaş olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Abe Olandres

    Abe Olandres

    16 EYLÜL 2006
  • Android Developers

    Android Deve

    9 Kasım 2007
  • Louis C.K.

    Louis C.K.

    18 HAZİRAN 2006