2013-08-11 12 views
13

İstemciden gelen isteklere yanıt olarak bellek içi durumu güncelleştirmesi gereken bir Meteor uygulaması için sunucu tarafı mantığı yazıyorum. Bu uygulama, güçlü eşzamanlılık garantilerine ihtiyaç duyuyor - özellikle, bir seferde sadece bir güncelleme yürütüldüğünden emin olmak istiyorum.Meteor eşzamanlılık modeli nedir?

Meteor'ın eşzamanlılık modelinin bunu destekleyip desteklemediğini anlamaya çalışıyorum. Belgeleme, Meteor'ın çok iş parçacıklı olduğundan (bu bir sorun olabilir) bahseder, ancak etrafta arama yaptıktan sonra Meteor'ın aslında fiberleri (açıkça programlanmış iş parçacıkları) kullandığı izlenimini edinirim. Eğer bu doğruysa, kodumun atomik olarak çalışması gereken kısmı herhangi bir Meteor çağrısı yapmıyorsa (IO içeren ve böylece yürütme kilidini verdiğinde) eminim.

Bu böyle mi? Meteor'ın eşzamanlılık modeli hakkında daha fazla bilgiyi nerede bulabilirim?

+0

Sanırım bellekte saklamak için kilitleri kendiniz uygulamanız gerekir veya mongo atomik işlemleri kullanabilirsiniz. – Denis

+0

Yardımcı oluyorsa, lif kitaplığı belgelerinin [burada] [1] [1]: https://github.com/laverdet/node-fibers –

+0

@Denis Bellek içi kilitleri uygulayabiliyorsam IO olmayan, üretken olmayan işlemler atomiktir, daha sonra bu uygulama için bunlara bile ihtiyacım yoktur. Her durumda Meteor'da eşzamanlılığın gelecekteki bilgiler için nasıl çalıştığını bilmek istiyorum. Bu şeyler açıkça bir yerlerde belgelenmelidir; değil. Muhtemelen Meteor kaynak kodundan geçeceğim. – disatisfieddinosaur

cevap

11

Tamam, Meteor kaynağı baktım ve burada işler böyle: sunucu tarafında

1) Meteor münhasıran eşzamanlılık işlemek için liflerini kullanır. Lifler, dişler gibidir, ancak bağlam açıkça belirtilmelidir. Bu, eşzamanlılık hakkında akıl yürütmeyi, başkalarının açlıktan bıraktığı bazı liflerin (potansiyel) maliyetinde kolaylaştırır.

2) Tüm Meteor.call, Meteor.setInterval ve tüm Toplama işlemlerine yapılan çağrılar fiberlerle sarılır. Bu, tüm bu çağrıların bağlam getirdiği anlamına gelir. 3) Ayrıca, fiberlerin/futures modülünün herhangi bir şekilde kullanılması da sağlanır.

Bu yapının üstesinden gelmek, atomik işlemler yazmak istiyorsanız, atom yapmak istediğiniz kod bloğundaki Meteor çerçevesi tarafından sağlanan nesnelere erişmekten kaçının. Bu blok gerçekten bir DB erişimine ihtiyaç duyuyorsa (diyelim), bellek içi kilitleri sorunsuz bir şekilde uygulayabilirsiniz, ancak benim uygulama için bu bilgi yeterlidir. Temel güncelleme fonksiyonumun, Mongo'nun ihtiyaç duyduğu tüm dokümanların okunması gerekiyor. meteor Dokümanlar

1

: Meteor In

, sunucu kodu istek başına tek bir iş parçacığı, Düğüm tipik asenkron geri arama tarzında değil çalışır. Lineer yürütme modelini, Meteor uygulamasındaki tipik sunucu kodu için daha uygun bir şekilde buluruz.

http://docs.meteor.com/#structuringyourapp

kimse bu performans etkileri biliyor mu

?