Erlang, eşzamanlı programlamada yarış koşullarını hangi anlamlı yollarla önler?


11

Erlang'daki eşzamanlılık hakkında okumak bana Akka eşzamanlılık araç setini hatırlatıyor . Her ikisi de yarış koşullarını önlemek veya sınırlamak için araçlar sunar . Ancak hala güvenli olmayan Akka araç setini kullanarak değişebilir verilere bağlantılar diğer işlemlere gönderebilirsiniz. Akka'yı faydalı bir araç olarak görüyorum, ancak yarış koşullarına, kilitlenmeye ve / veya açlığa neden olan nesnelere ve verilere sıra dışı erişime karşı koruma sağlamaz . Java veya C # 'ın sizi C ++' da yazabileceğiniz bellek sızıntılarının çoğunu yazmaya karşı koruduğu şekilde güvenli olmayan kod yazmanızı engellemez (yine de çöp toplayıcıyı kandırarak Java'da bellek sızıntıları oluşturabilirsiniz, ancak daha az tahsis ettiğiniz her baytı boşaltmayı hatırlamak zorunda kalmanızdan daha çok).

Erlang, eşzamanlı programlamada bir derece doğruluk, performans ve sağlamlığı garanti ediyor mu? İşletim sistemlerinin sistem kaynaklarına erişirken koruma sağladığını düşünüyorum (sürücü yazarlarının işlerini iyi yaptığını varsayarak). ACID veritabanları okumalar ve güncellemeler için koruma sağlar. Görünüşe göre bu çözülebilir bir problem. Yoksa genel bir güvenli çözüm, eşzamanlılığın sağladığı performans kazanımlarını siler mi? Diğer diller veya araç setleri, Erlang'ın yaptığı (ya da yapmadığı) eşzamanlı güvenlik sağlıyor mu?

Bu, @ Malfist'in @ user1249'un Hangi programlama dili bulmak zor en az hata üretir? .

Yanıtlar:


19

Erlang'ın bunlara yardım etmek için yaptığı birkaç şey var.

  • Veriler değiştirilemez, dolayısıyla veri yarışları yok
  • OTP gen_servers ve gen_fsm sunucuları için çok iyi test edilmiş bir model sunar
  • Süpervizörler çökmelerden kurtulmaya izin verir
  • süreçler küçük ve ucuz
  • Bellek, işlem başına ayrılarak ayrılır (GC donmaz)
  • erlang VM çok ağır yükler altında çalışacak şekilde optimize edilmiştir
  • Yazılım anında güncellenebilir, böylece yükseltme kesintileri olmaz

Buradaki en önemli şey, Erlang'da kilit gerektirebilecek ortak bir durum olmamasıdır, bu nedenle kilitlere gerek yoktur. Kesinti süresi, yüksek hata toleransı ve eşzamanlılık gerektirmeyen yumuşak gerçek zamanlı uygulamalar için mükemmel bir dildir


12
@JarrodRoberson: Aslında asıl mesele paylaşılan bir değişmez durum değil . Mutasyona uğramazsanız durumu paylaşmak sorun olmaz. Değişmez durum, paylaşmazsanız sorun değil.
Jörg W Mittag

1
Yeni bir araç Concuerror da vardır youtube.com/watch?v=FpkjKN9wTKg mümkün olan tüm olay orderings ile testlerle çalıştırmanızı sağlar
Zachary K
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.