Erlang Karakteristikleri
Gönderen Erlang Programlama (2009):
Erlang eşzamanlılığı hızlı ve ölçeklenebilirdir. Erlang sanal makinesinin oluşturulan her işlem için bir OS iş parçacığı oluşturmadığı için işlemleri hafiftir. Temel işletim sisteminden bağımsız olarak VM'de oluşturulur, planlanır ve işlenir. Sonuç olarak, süreç oluşturma süresi mikrosaniye mertebesinde ve eşzamanlı olarak mevcut süreçlerin sayısından bağımsızdır. Bunu, her işlem için temel bir OS iş parçacığının oluşturulduğu Java ve C # ile karşılaştırın: Erlang her iki dili de büyük ölçüde geride bıraktığında çok rekabetçi karşılaştırmalar alacaksınız.
Gönderen eşzamanlılık Erlang (pdf) içinde programlama odaklı (slaytlar) (2003):
Bir Erlang işlemi oluşturmak için geçen sürenin 1µs ila 2.500 işlem arasında sabit olduğunu gözlemliyoruz; daha sonra 30.000 işleme kadar yaklaşık 3µs'ye yükselir. Java ve C # performansı şeklin üst kısmında gösterilir. Az sayıda işlem için, bir işlem oluşturmak yaklaşık 300µs alır. İki binden fazla süreç oluşturmak imkansızdır.
30.000 işleme kadar iki Erlang işlemi arasında mesaj gönderme süresinin yaklaşık 0,8 µs olduğunu görüyoruz. C # için, maksimum işlem sayısına kadar (yaklaşık 1800 işlem) mesaj başına yaklaşık 50µs alır. Java daha da kötüydü, 100'e kadar işlem için mesaj başına yaklaşık 50µs aldı ve daha sonra yaklaşık 1000 Java işlemi olduğunda mesaj başına hızla 10 ms'ye çıktı.
Düşüncelerim
Erlang süreçlerinin neden yeni süreçlerin ortaya çıkmasında çok daha verimli olduğunu ve işlem başına daha küçük bellek ayak izlerine sahip olduklarını teknik olarak tam olarak anlamıyorum. Hem OS hem de Erlang VM, zamanlama, bağlam anahtarları yapmak ve kayıtlardaki değerleri takip etmek vb.
OS iş parçacıkları neden Erlang'daki işlemlerle aynı şekilde uygulanmaz? Daha fazla bir şeyleri desteklemeleri mi gerekiyor? Ve neden daha büyük bir bellek alanına ihtiyaç duyuyorlar? Ve neden daha yavaş yumurtlama ve iletişim var?
Teknik olarak, Erlang'daki süreçler yumurtlama ve iletişim söz konusu olduğunda neden OS iş parçacıklarından daha verimli? İşletim sistemindeki iş parçacıkları neden aynı verimli şekilde uygulanamıyor ve yönetilemiyor? İşletim sistemi iş parçacığı neden daha büyük bir bellek alanına, daha yavaş yumurtlama ve iletişime sahiptir?
Daha fazla okuma
erl +P 1000100 +hms 100
yazın {_, PIDs} = timer:tc(lists,map,[fun(_)->spawn(fun()->receive stop -> ok end end) end, lists:seq(1,1000000)]).
ve daha sonra sonuç için yaklaşık üç dakika bekleyin. Bu çok basit. Mine dizüstü bilgisayarda işlem başına 140us ve 1GB tüm RAM alır. Ancak doğrudan kabuk oluşturur, derlenmiş koddan daha iyi olmalıdır.