2013-08-11 96 views
13

Tôi đang viết logic phía máy chủ cho ứng dụng Meteor phải cập nhật trạng thái trong bộ nhớ để đáp ứng các yêu cầu từ máy khách. Ứng dụng này cần đảm bảo đồng thời mạnh mẽ - đặc biệt, tôi muốn chắc chắn rằng chỉ có một bản cập nhật được thực thi tại một thời điểm.Mô hình đồng thời Meteor là gì?

Tôi đang cố gắng tìm hiểu xem mô hình đồng thời của Meteor có hỗ trợ điều này hay không. Tài liệu đề cập rằng Meteor là đa luồng (mà có thể là một vấn đề), nhưng sau khi tìm kiếm xung quanh, tôi có ấn tượng rằng Meteor thực sự sử dụng các sợi (các luồng được lên lịch rõ ràng). Nếu đó là sự thật, thì tôi an toàn miễn là một phần mã của tôi cần chạy nguyên tử không thực hiện bất kỳ cuộc gọi Meteor nào (liên quan đến IO và do đó mang lại khóa thực thi).

Đây có phải là trường hợp không? Tôi có thể tìm thêm thông tin về mô hình đồng thời của Meteor ở đâu?

+0

Tôi nghĩ bạn nên tự mình thực hiện khóa cho bộ nhớ trong bộ nhớ hoặc bạn có thể sử dụng các hoạt động nguyên tử mongo. – Denis

+0

Nếu được, tài liệu cho thư viện sợi là [ở đây] [1] [1]: https://github.com/laverdet/node-fibers –

+0

@Denis Nếu tôi có thể thực hiện khóa trong bộ nhớ vì các hoạt động phi IO, không sinh lãi là nguyên tử, sau đó tôi thậm chí không cần chúng cho ứng dụng này. Trong mọi trường hợp, tôi muốn biết sự tương tranh trong Meteor hoạt động như thế nào cho các thông tin trong tương lai. Công cụ này phải được ghi rõ ở đâu đó; không phải vậy. Có lẽ tôi sẽ đi qua mã nguồn Meteor. – disatisfieddinosaur

Trả lời

11

Được rồi, tôi nhìn qua nguồn Meteor và dưới đây là cách mọi thứ làm việc:

1) Trên server-side, Meteor độc quyền sử dụng sợi để xử lý đồng thời. Các sợi giống như các luồng, ngoại trừ ngữ cảnh đó phải được mang lại một cách rõ ràng. Điều này làm cho lý luận về đồng thời dễ dàng hơn, tại (tiềm năng) chi phí của một số sợi đói những người khác.

2) Tất cả các cuộc gọi tới Meteor.call, Meteor.setInterval và mọi hoạt động Thu thập được bao bọc trong các sợi. Điều này có nghĩa là tất cả các cuộc gọi này đều mang lại ngữ cảnh.

3) Ngoài ra, việc sử dụng bất kỳ lợi ích của mô-đun sợi/tương lai.

Kết quả của cấu trúc này là nếu bạn muốn viết các hoạt động nguyên tử, chỉ cần tránh truy cập các đối tượng do khung Meteor cung cấp trong khối mã mà bạn muốn tạo nguyên tử. Nếu khối này thực sự cần (nói) một truy cập DB, sau đó bạn có thể thực hiện trong bộ nhớ khóa mà không gặp rắc rối, nhưng đối với ứng dụng của tôi, kiến ​​thức này là đủ. Chức năng cập nhật cốt lõi của tôi chỉ cần được gọi với tất cả các tài liệu cần thiết từ Mongo đã đọc.

1

Từ các tài liệu sao băng:

Trong Meteor, mã máy chủ của bạn chạy trong một chủ đề duy nhất cho mỗi yêu cầu, không theo phong cách gọi lại không đồng bộ tiêu biểu của Node. Chúng tôi tìm thấy mô hình thực hiện tuyến tính phù hợp hơn với mã máy chủ điển hình trong ứng dụng Meteor .

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

Có ai biết ý nghĩa thực hiện điều này?