Öncelikle, oldukça fazla Java deneyimim olduğunu söylememe izin verin, ancak son zamanlarda işlevsel dillerle ilgilenmeye başladım. Son zamanlarda çok güzel bir dil gibi görünen Scala'ya bakmaya başladım.
Bununla birlikte, Scala'nın Scala'da Programlamadaki Aktör çerçevesi hakkında okuyorum ve anlamadığım bir şey var. Bölüm 30.4'te, react
yerine receive
kullanmanın, iş parçacığını yeniden kullanmayı mümkün kıldığını söylüyor; bu, JVM'de iş parçacıkları pahalı olduğu için performans için iyidir.
Bu, react
yerine aramayı hatırladığım sürece istediğim receive
kadar Oyuncuya başlayabileceğim anlamına mı geliyor ? Scala'yı keşfetmeden önce, Erlang ile oynuyordum ve Programming Erlang'ın yazarı, 200.000'den fazla işlemi ter dökmeden üretmekle övünüyor. Bunu Java dizileriyle yapmaktan nefret ederim. Erlang (ve Java) ile karşılaştırıldığında Scala'da ne tür sınırlamalara bakıyorum?
Ayrıca, bu iş parçacığı yeniden kullanımı Scala'da nasıl çalışır? Basit olması için, sadece bir iş parçacığım olduğunu varsayalım. Başladığım tüm aktörler bu dizide sıralı olarak mı çalışacak yoksa bir tür görev değiştirme gerçekleşecek mi? Örneğin, birbirine pinpon mesajları gönderen iki oyuncu başlatırsam, aynı ileti dizisinde başladıkları takdirde kilitlenme riskini alır mıyım?
Scala'da Programlama'ya göre , oyuncuları kullanmak react
, kullanmaktan daha zor receive
. react
Geri dönmediği için bu kulağa mantıklı geliyor . Ancak kitap, react
kullanarak bir döngüyü nasıl içine koyabileceğinizi göstermeye devam ediyor Actor.loop
. Sonuç olarak, alırsınız
loop {
react {
...
}
}
ki bana oldukça benziyor
while (true) {
receive {
...
}
}
kitabın önceki bölümlerinde kullanılan. Yine de kitap "uygulamada programların en az birkaçına ihtiyaç duyacağını" söylüyor receive
. Peki burada neyi özlüyorum? Geri dönmekten başka ne yapabilir receive
ki react
? Ve neden umursuyorum?
Son olarak, anlamadığım şeyin özüne react
gelince : kitap, kullanmanın iş parçacığını yeniden kullanmak için çağrı yığınını atmayı nasıl mümkün kıldığından bahsetmeye devam ediyor . Bu nasıl çalışıyor? Çağrı yığınını atmak neden gereklidir? Ve bir işlev bir istisna ( react
) atarak sona erdiğinde , ancak return ( ) ile sona erdiğinde çağrı yığını neden iptal edilebilir receive
?
Scala'da Programlamanın buradaki bazı temel konuları gözden kaçırdığı izlenimine sahibim , bu utanç verici, çünkü aksi halde gerçekten mükemmel bir kitap.