Ana içeriğe geç

Aktör Modeli

İngilizcesi
Actor Model
Okunuşu
ektır madıl

Günlük kullanımda iki ad da yaygın.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/actor-model

Kısaca

Aktör modeli, eşzamanlı sistemleri aktörlerden kurar: özel durumu olan ve birbiriyle yalnızca asenkron mesajlar göndererek iletişim kuran bağımsız birimler.

Aktör modeli (actor model) nedir?

Aktör modeli bir programı birçok küçük ve bağımsız aktörden oluşacak şekilde yapılandırır. Her aktörün kendine ait özel bir durumu ve bir posta kutusu (mailbox) vardır; onunla etkileşim kurmanın tek yolu ona bir mesaj göndermektir. Bir aktör bir mesajı işlerken üç şey yapabilir: tanıdığı aktörlere mesaj göndermek, yeni aktörler oluşturmak ve bir sonraki mesajı nasıl işleyeceğine, örneğin durumunu güncelleyerek, karar vermek. Modeli 1973'te Carl Hewitt, Peter Bishop ve Richard Steiger ortaya koydu.

Bir aktör mesajları birer birer işler; bu yüzden durumuna hiçbir zaman iki thread aynı anda dokunmaz ve kilit gerekmez. Mesajlar asenkrondur: gönderen, mesajı posta kutusuna bırakır ve beklemeden yoluna devam eder. Alıcı aktör ister aynı süreçte ister başka bir makinede olsun mesaj göndermek aynı göründüğü için model tek bir bilgisayardan bir kümeye (cluster) doğal biçimde genişler; birçok framework de bir üst aktörün çöken bir alt aktörü yeniden başlattığı gözetim (supervision) mekanizmasını ekler.

Erlang ve Elixir'deki süreçler aktör olarak çalışır; bu dillerin telekom santrallerini ve sohbet altyapılarını çalıştırmasının bir nedeni de budur. JVM'de Akka ile Akka'nın 2022'de kaynağı erişilebilir (source-available) bir lisansa geçmesinin ardından başlatılan açık kaynaklı çatalı Apache Pekko aktörler sunar; Microsoft Orleans .NET için sanal aktörler (virtual actors) sağlar, Swift'te ise durumu veri yarışlarına (data race) karşı koruyan bir actor anahtar sözcüğü vardır. Model, herkesin yalnızca kendi gelen kutusundan çalıştığı bir ofise benzer: kimse bir iş arkadaşının masasına uzanmaz, notlar bırakılır ve herkes notları birer birer ele alır.

Aktör modeli sıklıkla düz thread'lerle ve mesaj kuyruklarıyla karıştırılır. Thread'ler belleği paylaşır ve kilitlerle eşgüdüm sağlar; bu da yarış durumlarına ve kilitlenmelere (deadlock) davetiye çıkarır. Aktörler ise hiçbir şey paylaşmaz ve bir zamanlayıcı binlercesini, hatta milyonlarcasını birkaç thread üzerinde çalıştırır. RabbitMQ gibi bir mesaj aracısı (message broker) mesajları ayrı servisler arasında taşıyan bir altyapıdır; aktör modelinde ise her aktörün kendi posta kutusu vardır ve işi yapan birim aktörün kendisidir.

Önemli noktalar

  • Aktörün özel bir durumu ve bir posta kutusu vardır; yalnızca mesajlarla iletişim kurar.
  • Her aktör mesajları birer birer işler; bu yüzden durumu kilit gerektirmez.
  • Mesajlar asenkrondur ve aynı model makineler arasında da çalışır.
  • Erlang, Elixir, Akka, Apache Pekko ve Microsoft Orleans aktörler etrafında kuruludur.
  • Aktörler hiçbir şey paylaşmaz; thread'ler ise belleği paylaşır ve kilit gerektirir.

Örnek

Elixir'de bir sayaç aktörü: özel durum, posta kutusu ve mesajlarelixir
defmodule Counter do
  def loop(count) do                    # count is private: no shared memory
    receive do                          # take one message from the mailbox
      :increment -> loop(count + 1)
      {:get, from} ->
        send(from, {:count, count})
        loop(count)
    end
  end
end

counter = spawn(fn -> Counter.loop(0) end)      # create an actor
for _ <- 1..3, do: send(counter, :increment)    # asynchronous: send and carry on
send(counter, {:get, self()})
receive do {:count, n} -> IO.puts(n) end        # prints 3

Sık sorulan sorular

Aktör ile thread aynı şey mi?

Hayır. Aktör, posta kutusu olan hafif bir nesnedir; bir işletim sistemi thread'i değildir. Bir çalışma ortamı çok sayıda aktörü küçük bir thread havuzu üzerinde zamanlar ve bir aktör yalnızca bir mesajı işlerken bir thread kullanır.

Aktör modeli ne için kullanılır?

Eşzamanlı olarak değişen birçok bağımsız durum parçası olan sistemler için: sohbet ve mesajlaşma sunucuları, çok oyunculu oyun sunucuları, telekom santralleri, her cihazı bir aktör olarak modelleyen IoT platformları ve alım satım sistemleri. Gözetim mekanizması ve konumdan bağımsız mesajlaşma, onu hataya dayanıklı dağıtık sistemler için de uygun kılar.

Aktör modelinin dezavantajları nelerdir?

Asenkron mesajları takip etmek ve onlarla hata ayıklamak, doğrudan fonksiyon çağrılarına göre daha zordur; yanıt bekleyen bir istek de ek düzenek gerektirir. Teslim garantileri de sınırlıdır: ağ üzerinden bir mesaj kaybolabilir, bu yüzden önemli mesajlar için onay ya da yeniden deneme gerekir.

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar