2010-05-07 6 views
9

Erlang hakkında çok sınırlı bilgiye sahibim, ama anladığım kadarıyla, "süreçleri" çok düşük bir maliyetle doğurabilir.Sahnelerin arkasında Erlang süreçleri nelerdir?

Bu yüzden sahnelerin ardındaki "süreçler" nedir?

Elyaf mı? İş Parçacığı? Continuations?

+0

related: http://stackoverflow.com/questions/1934707/what-other-systems-beside-erlang-are-based-on-green-processes – jldupont

+0

related: http://stackoverflow.com/questions/1947180/whats-the-difference-yeşil-thread-ve-erlangs-process arasında – jldupont

cevap

3

:

Erlang işlemleri oluşturmak ve sona erdirmek ve zamanlama havai düşük hızlı Küçük bir bellek alanı ile hafif (büyümesi ve dinamik olarak küçültmek) vardır.

Kaynak:

http://www.defmacro.org/ramblings/concurrency.html

Erlang süreçleri hakkında konuşurken, diyor:

Erlang süreçler de buna bir göz atmak isteyebilirsiniz http://www.erlang.org/doc/reference_manual/processes.html

hafif konularıdır. 'u başlatmak ve yok etmek için çok ucuzlar ve anahtarına çok hızlı geçiyorlar çünkü kaputun altında sadece fonksiyonlar. Modern bir masaüstü bilgisayarında çalışan tipik bir Erlang sistemi, arasında binlerce on binlerce bu gibi işlemlere geçiş yapabilir. anahtarlarının daha az zerre oluşturmasını sağlayan düzine işlev çağrısı her iki işlemden geçirilir, ancak içerik geçişinde normalde muazzam bir zaman harcanır.

+0

Peki bu liflerden nasıl farklıdır? –

+0

Örneğin, Ruby Fibers farklı çekirdeklerde/CPU'larda aynı anda çalışamaz (bildiğim kadarıyla, eğer yanılıyorsam düzeltin), Erlang bu konuda çok iyi. –

+0

Daha fazla bir Ruby sınırlaması değil mi? Win32'de iş parçacığından/içeriğinden lifler oluşturabilirsiniz. ve bu yüzden onları birden fazla çekirdek üzerinde çalıştırmak için herhangi bir sorun olmamalı? –

-10

Temel olarak onlar Threads;) Onlar için bir adres alanı. Erlang doc da

+0

Hayır değil. İplikler Erlang süreçlerini uygulamak için çok ağır. (Reddetmedim, btw.) –

+0

Yani bir iş parçacığının zamanlamasıyla tamamen taklit ediliyorlar? Üzgünüz, bu, bilgisayarların birden fazla çekirdeğe sahip olduğu zamanlarda verimsiz sesler çıkarıyor;) – TomTom

+0

Erlang SMP, CPU çekirdeği başına bir iş parçacığı. Erlang VM her bir işlemi yalıtılmış bir adres alanı, ipc ve zaman paylaşımı ile sağlar. – cthulahoops

1

Kesin bir kaynak bulundu, ancak henüz den ne anlamak:

  • üzerinde başlatmak için hangi erlang süreci belirleyen bir zamanlayıcı (örn veya işbirliği hareket birden çok programa) bulunmaktadır hangi OS iş parçacığı.

  • Bu süreçler bir growable yığını ( belki bir önsözü gerekirse yığını ayırır her fonksiyonlar) zorunda ihtiyaç duydukları sürece çok fazla bellek tüketmeyin.

  • Onlar verilerine bekleyen veya (bazı işlevlerde belki önsöz kod geçtikten ne kadar zaman bakar) bir zaman yeterli miktarda idam olup olmamasına bağlı olarak zamanlayıcı geri verim. İplikten farklı olarak, önlenmezler mi?

  • Her süreç farklı sayfalarından veya farklı ayırıcı bellek ayırır, nedenle (OS süreçleri hafızayı paylaşan kaçınmalarını benzer şekilde) bellek paylaşmak mümkün değildir.

  • Tahminen ayrıca çöp toplama yardımcı olmak ve olur ayrı ayırıcılar veya erlang süreci başına sayfalarını sahip süreç daha sonra sayfaları herhangi çöp toplama yapmak zorunda kalmadan iade edilebilir, biter durumda: http://prog21.dadgum.com/16.html