2012-01-24 14 views
6

Aşağıdaki fonksiyon, çalışan çekirdeğinde engelleniyor mu?ERLANG wait() ve bloke etme

Büyük cevap irade detay erlang ve/veya cpu iç çalışma.

wait(Sec) -> 
    receive 
    after (1000 * Sec) -> ok 
    end. 

cevap

7

kodlayan olacak blok yürütür işlem olup, şu anda olmaz blok bu süreci çalışan zamanlayıcı. Gönderdiğiniz kod bir verime eşit, ancak bir zaman aşımıyla.

bu çekirdek için Erlang VM zamanlayıcı zaman aşımı yangınları kadar diğer süreçler yürütmeye devam edecektir ve bu süreç tekrar yürütülmesi için programlanır.

+0

NodeJS en 'setTimeout' bir erlang eşdeğer var mı? Geçerli iş parçacığı – CMCDragonkai

+0

@ CMCDragonkai için engellenmiyor: Şu anda bir almayı engelliyorsunuz (zaman aşımı olsun ya da olmasın) ya da yapmıyorsunuz. Zaman aşımını 0 olarak ayarlayarak işi "alma" çağrılarınız arasında zamanlayabilirsiniz. Bu aslında gelen kutunuzu kontrol etmek ve boşsa devam eden çalışma anlamına gelir. Daha gelişmiş kontrolleri örneğin ['send_after/3'] kullanarak da planlayabilirsiniz (http://erlang.org/doc/man/erlang.html#send_after-3). –

2

Kısa cevap: Bu sadece mevcut (hafif) sürecini engeller ve tüm VM engellemez. Daha fazla ayrıntı için erlang zamanlayıcısı hakkında okumalısınız. Güzel açıklama Francesco Cesarini ve Simon Thompson'ın "Concurent Programming" kitabından geliyor. Bir süreç gönderildiğinde

... kesik ... , onu çalıştırmak için izin verilir † indirimleri bir dizi çalıştırılan her operasyon indirgendiği bir numara atanır. İşlem, iletilerden hiçbirinin eşleşmediği veya reddetme sayısının sıfıra ulaştığı bir aldatma girer girmez, bu önceden girilir. Sürece BIFS yürütülmez gibi, işlemler arasında icra zaman uygun (ancak eşit değildir) tahsis bu strateji ile sonuçlanır. ... kesik ...

1

hiçbir şey Erlang özgü, oldukça klasik bir sorun: zaman aşımları yalnızca bir sistem saat kesintisinde gerçekleşebilir. Yukarıdaki gibi aynı cevap: bu işlem saat kesintisini beklerken engellenir, her şey gayet iyi çalışıyor.

o süreç o saat süre bağlıdır (ve bu sistem bağımlı) ama bu başka bir konu, çünkü tam olarak bu kesin olmadığı bekleyecek gerçek zaman hakkında başka bir tartışma yoktur.