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ç receive
gerekir'". 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
İ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.
'Scala durum ne.Tepki?...
Tasarım kararları Scala iyilik'JM...
Ne'In Scala?farklı Aktörler uygul...
Scala aktörler kötü uygulamalar?...
Nasıl Scala'ler geçerli mi() sihi...