Actor model nedir?
Bilgisayar bilimlerindeki actor
, eş zamanlı hesaplamayı ele alan kavramsal bir modeldir. Actor
larda, sistem bileşenlerinin birbiri ile nasıl etkileşime girmesi gerektiğine ilişkin bazı genel kurallar tanımlanmıştır.
Bu modeli kullanan en ünlü dil Erlang‘dır.
Actor
Actor
, eş zamanlı hesaplamanın en temel birimidir. Actor
bir mesajı alır ve o mesaja dayalı çeşitli hesaplamalar yapar. Bu düşünce object-oriented
dillerde sahip olduğumuz şeylere çok benzer. Bir obje, mesaj alır (ki bu object-oriented
teki fonksiyon çağrısına denk gelir) ve hangi mesajı aldığına (fonksiyonun yaptığı işe göre) bağlı olarak bir şeyler yapar.
Temel fark, actor
lerin birbirlerinden tamamen izole olması ve memory
i asla paylaşmamasıdır. Ayrıca bir actor
ün başka bir actor
tarafından hiçbir zaman değiştirilemediği özel durumların da olduğunu belirtmek gerekir.
Yalnız öküz, çifte koşulmaz
Yani tek bir actor
ile actor
modeli çalışmaz. Bu yüzden sisteme birlikte girmeleri gerekiyor. Actor
modelinde her şey bir actor
dür ve bir actor
ün başka actor
e mesaj gönderebilmesi için actor
lerin adreslerinin olması gerekir.
Her Actor’ün bir posta kutusu var
Birden çok actor
aynı anda çalışabilse de bir actor
ün mesajları sadece sıralı olarak işleyebileceğini anlamak önemlidir. Bu aynı actor
e 3 mesaj gönderirseniz bir seferde 1 mesajı işleyebileceğiniz anlamına geliyor. Bu 3 mesajın aynı anda yürütülmesi için 3 actor
oluşturmanız ve her birine bir mesaj göndermeniz gerekir.
Mesaj actor
e asynchronous
olarak gönderilir. Actor
o sırada başka bir mesajı işliyorsa gönderilen mesaj actor
ün posta kutusuna kaydedilir.
Bir actor ne yapar?
Actor
bir mesaj aldığı zaman 3 şeyden birini yapar.
- Daha fazla
actor
yaratabilir. - Diğer
actor
lere mesaj gönderebilir. - Bir sonraki mesajda ne yapacağını söyleyebilir.
İlk iki madde oldukça basittir fakat sonuncusu ilginçtir.
Daha önce bir actor
ün özel durumlarının olduğundan bahsetmiştim. Bu madde, özel durumun alacağı bir sonraki mesaj için actor
ün nasıl davranacağını tanımlar. Yani actor
lerin özel durumlarını nasıl değiştirebileceğinden bahseder. (Biz buna actor
lerde mutasyon diyoruz)
Hesap makinesi gibi davranan bir actor
sisteminden bahsedelim. Ve başlangıç durumunda actor
ün state
i basitçe sayı olan 0 olsun. Bu aktör orjinal durumunu değiştirmeden add(1)
mesajı aldığında alacağı bir sonraki mesaj için state
1 olarak değişecek.
Hata toleransı
Erlang "let it crash"
yani “çökmesine izin ver” felsefesini tanıttı. Bu düşünce defansif bir programlamaya ihtiyaç olmadan, olabilecek tüm sorunları öngörmeye çalışarak bunları handle etmeyle uğraşmamak için ortaya çıktı. Çünkü basitçe her başarısız noktayı düşünmenin bir yolu yoktur.
Scala’da basit bir aktor modeli oluşturalım
akka.actor.Actor
, class
ından miras alarak receive
methodu olan yeni bir actor class
ı oluşturalım.
Bunun için ilk olarak yeni bir SBT
projesi oluşturup Akka
için gerekli bağımlılıklari build.sbt
dosyamıza ekleyelim.
Ardından “hello” mesajını aldığında cevap verebilen bir actor
tanımlayalım.
Bunu Hello.scala olarak projemize kaydedelim. Ve sbt run
ile çalıştıralım.
Kodu inceleyelim
Sırayla kodun açıklamasını yapalım.
import
adımlarıactor
için gerekli bağımlılıkları yüklüyor. BuradaActor, ActorSystem ve Probs
,actor
oluşturmamız için gerekli bağımlılıklar.Actor
modelimizeHelloActor
ismini verdik.HelloActor
, alınan mesajın içeriğine göre yapacağı işleri belirleyenreceive
methoduna sahipHelloActor
,hello
mesajını alırsa"hello back at you"
mesajını diğer tüm mesajlarda"huh"
mesajını ekrana yazdırır.Main
objesiHelloActor
ü test etmek için yaratılmıştır.Main
de bir şeyler başlatmak içinActorSystem
e ihtiyaç duyulmaktadır.ActorSystem
argüman olarak bir isim alır, bu yüzden sisteme anlamlı bir isim verdik. İsim yalnızca [a-zA-Z0-9] karakterlerini alan bir kelimeden oluşur. “-“ yada boşluk gibi karakterler gelemez.Actor
ler oluşturulduğunda otomatik olarak (asynchronous
olarak) başlatılır, bu nedenle herhangi birrun
veyastart
yöntemini aramanıza gerek yoktur.Main
de oluşturulan 2actor
e,hello
vehow are you?
mesajı gönderilir.helloActor
, println ifadelerini çalıştırarak iletilere yanıt verir.- Daha sonra
ActorSystem
kapatılır.
İlk actor
ünüzü oluşturmanız için gereken her şey bu kadar.
Eğer anlamadığınız bir yer var ise alt kısımdaki disqus’a yorum yapabilirsiniz.
İçerikte herhangi bir eksiklik veyahut yanlış olduğunu düşündüğünüz bir kısım var ise mail atmaktan çekinmeyin.