Erlang ve Go eşzamanlı programlama, CSP ve Aktörler arasındaki objektif farklılıklar?


19

Erlang ve Go programlama dillerinde eşzamanlı programlamaya bakıyordum. Bulgularıma göre sırasıyla Aktör modeli ve CSP kullanılmıştır.

Ama yine de CSP ve Aktörler arasındaki nesnel farklar nelerdir? sadece teorik olarak farklı mı ama aynı kavram mı?


Go, Erlang'dan farklı bir ilkel seti sağladığından aynı değiller. Buna ek olarak Go, Erlang ve C benzeri özelliklerden çok daha düşük bir seviyedir.
Daniel Gratzer

Bir daha hangi dili, teknolojiyi veya projeyi alması gerektiğine dair sorular, yalnızca cevaplar için öznel görüşler çekebildikleri için Programcılar'ın konusu dışındadır. Kalıcı değere sahip cevaplar yaratmak için sorunun arkasında çok fazla bireysel faktör vardır. Önerilen okuma: Gorilla vs Shark
gnat

3
@gnat Kabul etmiyorum, bu CSP ve Aktörler arasındaki nesnel farklılıklar hakkında soru soruyor. Bu oldukça makul bir soru
Daniel Gratzer

2
Soru iyi ya da kötü değil, belirlenecek olanla ilgili değildir, bu nedenle bu soru somuttur ve öznel tartışmanın bir nedeni değildir.
nish1013

1
CS Theory StackExchange'te bu soruya çok güzel bir cevap var
Jörg W Mittag

Yanıtlar:


21

Uygulamada, çok az fark vardır: her ikisi de dış dünya ile birincil arayüzü mesajlar olan ayrı yürütme birimlerini temsil eder .

Farklılıklar dillerin uygulama detaylarındadır. İşte bu tür birkaç ayrıntı:

  • Go'daki kanallar yazılır; farklı veriler içeren mesajlar göndermek istiyorsanız ayrı kanallara ihtiyacınız vardır. Erlang ile kişi receivesürece gönderilen herşeyi alır ve kalıp eşleşmesi gerekir (Go'da, selectbirden çok durumda bir a kullanırsınız , böylece kod sadece farklı kanallarda çok benzer görünür).
  • Herkes bir Go kanalı okuyabilir veya yazabilir. Erlang'da, herkes bir sürece gönderebilir, ancak yalnızca bu işlem alınır. Bir görevi birden çok işçi arasında bölmek istiyorsanız bu önemli hale gelir: Erlang'da bir dağıtım işlemi oluşturmanız gerekirken, Go sadece bir kanalı paylaşabilir.
  • Erlang, işlemleri birden çok ana bilgisayar / VM üzerinde dağıtmak için (çoğunlukla) şeffaf bir yol sağlar. Goroutinler (dağıtım için kütüphaneler olmasına rağmen) tek bir işlemle sınırlıdır.
  • Hata işleme çok farklıdır. Erlang her işlemi bağımsız olarak ele alır: bir işlemdeki bir hata (bölme-0 diyelim) bunları açıkça bağlamadığınız sürece diğer işlemleri etkilemeyecektir (ölü işlemden bir mesaj bekleyen bir şey askıda kalsa da). Goroutinlerin tümü aynı işlem alanında çalışır; 0'a bölmek tüm programı kapatacaktır.
  • Erlang'da veriler değişmez. Bu, bir süreçle dış dünya arasındaki tüm iletişimin mesajlar aracılığıyla gerçekleştiği anlamına gelir . Go, durumu goroutinler arasında paylaşmanıza olanak tanır (yapmamalısınız).

Bu son nokta bence en önemlisi. Her ikisi de mesajları birincil iletişim aracı olarak kullanırken , Erlang durumun nasıl ve ne zaman değişebileceği konusunda çok daha güçlü garantiler verir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.