2014-09-09 24 views
7

Philip Roberts, çağrı yığını, olay döngüsü, görev sırası ve webapis gibi "dış" iş parçacıkları arasında net bir açıklama sağlayan tarayıcı olay döngüsü here açıklayan mükemmel bir iş yapar. Benim sorum bu düğüm olay döngüsündeki eşdeğer bileşenleri paralel yapmak ve temelde aynı şey denir. Yani, Node'un dosyasını ve web i/o kitaplıklarını kullanarak bir çağrı yaptığımda, bunlar geri çağrıları bir görev kuyruğunda kuyruğa alındığı yığın dışında gerçekleşen şeylerdir?Düğüm olay döngüsüne karşı krom tarayıcı olay döngüsü arasında önemli farklar var mı?

+1

Evet, temel fikir aynıdır. node.js, Chrome'un JS motorunu kullanıyor. – dandavis

+0

@apsillers Anlaşıldı. Sadece farkında olmak için önemli bir kavramsal farklılık olup olmadığını belirlemeye çalışıyorum. – JohnGalt

+2

Bir tarayıcıda birden fazla olay döngüsü olabilir (JS için, DOM için, vb.), Ancak kavram aynıdır, evet. – Bergi

cevap

5

... Node'un dosyasını ve web i/o kitaplıklarını kullanarak bir çağrı yaptığımda, bunlar geri arama sıralarında bir görev kuyruğunda sıraya giren şeylerdir.

Evet, kesinlikle; Ajax ve asenkron olarak setTimeout gibi eşzamansızdırlar. Çağrı yığınının dışında bir işlem yaparlar ve bu işlemi tamamladıklarında, olay döngüsü tarafından işlenecek sıraya bir olay eklerler.

Düğüm API'sı, bir tür eşzamansız no-op, setImmediate sağlar. Bu işlev için, yukarıda bahsettiğim "bazı işlem", "hiçbir şey yapmama", ardından bir öğenin hemen olay kuyruğunun sonuna eklenmesidir.

olay sıranın önünde için bir etkinlik etkin doğrultusunda kesme ve diğer tüm sıraya olaylar bekletmek ekler daha güçlü process.nextTick yoktur. Yinelemeli olarak çağrılırsa, bu diğer olayların (maxTickDepth ulaşana kadar) uzun gecikmesine neden olabilir.

+4

FWIW: Node.js ve Chrome **, ** aynı olay döngü uygulamasını kullanmıyor. Chrome/Chromium libevent'i kullanırken node.js libuv'u kullanır. – mscdex

+1

@mscdex whaaaaat - bilmek güzel; ASAP'ı düzenleyeceğim. Elinizde herhangi bir referans varsa, onları koymak isterim (tabii ki kendime bakacağım, ve kendiminkinden birini bulabilirmiyim). – apsillers

+1

[Burada] (https://chromium.googlesource.com/chromium/chromium/+/master/third_party/libevent/README.chromium), Chromium'un libevent içeren kaynak ağacıdır. [Burada] (https://github.com/joyent/node/blob/962e651476ce2035ce6e15eff5abd0f9c54e039c/src/node.cc#L3629-L3640) ana olay döngüsü için libuv kullanarak düğümdür. Her ikisi de v8'i ve bununla birlikte gelen her şeyi kullanırlar (her ne kadar Chrome, Chrome'dan çok farklı sürümler kullanabiliyor olsa da, Chrome düzenli olarak düzenli olarak güncellenir). – mscdex

İlgili konular