2013-08-11 10 views
13

Piszę logikę po stronie serwera dla aplikacji Meteor, która musi aktualizować stan w pamięci w odpowiedzi na żądania od klienta. Ta aplikacja wymaga silnych gwarancji współbieżności - w szczególności chcę mieć pewność, że jest tylko jedna aktualizacja wykonywana jednocześnie.Czym jest model współbieżności Meteor?

Próbuję dowiedzieć się, czy model współbieżności Meteor obsługuje to. Dokumentacja wspomina, że ​​Meteor jest wielowątkowy (co stanowiłoby problem), ale po przeszukiwaniu wydaje mi się, że Meteor faktycznie używa włókien (jawnie zaplanowanych wątków). Jeśli to prawda, to jestem bezpieczny, o ile część mojego kodu, który musi działać atomowo, nie wykonuje żadnych wywołań Meteora (które dotyczą IO, a tym samym powodują blokadę wykonania).

Czy tak jest w tym przypadku? Gdzie mogę znaleźć więcej informacji na temat modelu współbieżności Meteor?

+0

Myślę, że powinieneś sam zaimplementować blokady do przechowywania w pamięci lub możesz użyć operacji atomowych mongo. – Denis

+0

Jeśli to pomaga, dokumentacja dla biblioteki włókien jest [tutaj] [1] [1]: https://github.com/laverdet/node-fibers –

+0

@Denis Jeśli mogę zaimplementować blokady w pamięci, ponieważ Operacje non-IO, nie przynoszące zysków, są atomowe, więc nie potrzebuję ich nawet dla tej aplikacji. W każdym razie chcę wiedzieć, jak współbieżność w Meteorzie działa dla przyszłych informacji. Te rzeczy powinny być wyraźnie udokumentowane; nie jest. Prawdopodobnie zakończę przeglądanie kodu źródłowego Meteor. – disatisfieddinosaur

Odpowiedz

11

Alright, spojrzałem przez źródło Meteor i oto jak to działa:

1) Na stronie serwera, Meteor wyłącznie używa włókna do obsługi współbieżności. Włókna są jak nici, z tym wyjątkiem, że kontekst musi być jawnie poddany. To sprawia, że ​​rozumowanie o współbieżności jest łatwiejsze, przy (potencjalnym) koszcie niektórych włókien głodujących innych.

2) Wszystkie połączenia z Meteor.call, Meteor.setInterval i wszelkimi operacjami zbierania są pakowane we włókna. Oznacza to, że wszystkie te wywołania dają kontekst.

3) Ponadto, wszelkie wykorzystanie wydajności modułów włókien/kontraktów terminowych.

Efektem tej struktury jest to, że jeśli chcesz pisać operacje atomowe, po prostu unikaj dostępu do obiektów dostarczanych przez framework Meteor w bloku kodu, który chcesz uczynić atomowym. Jeśli ten blok naprawdę potrzebuje (powiedzmy) dostępu do bazy danych, możesz zaimplementować blokady w pamięci bez problemów, ale dla mojej aplikacji ta wiedza wystarczy. Moja podstawowa funkcja aktualizacji musi zostać wywołana z wszystkimi dokumentami, których potrzebuje od przeczytanego już Mongo.

1

Od docs meteorów:

W Meteor, kod serwer działa w jednym wątku na żądanie, a nie w asynchronicznych wywołań zwrotnych stylu typowym dla węzła. Model liniowy jest lepiej dopasowany do typowego kodu serwera w aplikacji Meteor .

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

Czy ktoś wie implikacje wyników dla tego?