2010-05-31 34 views
6

Vòng lặp tin nhắn trong công việc erlang như thế nào, chúng có đồng bộ hóa khi xử lý tin nhắn không?Vòng tin nhắn Erlang

Theo như tôi hiểu, vòng lặp sẽ bắt đầu bằng cách "nhận" tin nhắn và sau đó thực hiện điều gì đó và nhấn lặp lại vòng lặp khác.

Điều đó phải được đồng bộ hóa? đúng?

Nếu nhiều khách hàng gửi tin nhắn đến cùng một vòng lặp tin nhắn, thì tất cả các tin nhắn đó được xếp hàng đợi và thực hiện từng cái khác, hoặc?

Để xử lý nhiều thư song song, bạn sẽ phải sinh ra nhiều vòng tin nhắn trong các quy trình khác nhau, phải không?

Hay tôi đã hiểu sai tất cả?

Trả lời

9

Gửi thư không đồng bộ. Xử lý tin nhắn là đồng bộ - một tin nhắn sẽ được nhận tại một thời điểm - bởi vì mỗi quá trình có hộp thư riêng (và chỉ một).

4

Từ hướng dẫn (Erlang concurrency

Mỗi quá trình đã đợi đầu vào riêng của mình cho các thông điệp mà nó nhận được. Bài viết mới nhận được đưa vào cuối hàng đợi. Khi một quá trình thực hiện một nhận, thông điệp đầu tiên trong hàng đợi được so khớp với mẫu đầu tiên trong phần nhận, nếu điều này khớp với nhau, thông báo sẽ bị xóa khỏi hàng đợi và các hành động tương ứng với mẫu được thực thi.
Tuy nhiên, nếu mẫu đầu tiên không khớp, mẫu thứ hai là kiểm tra, nếu điều này phù hợp với thông điệp được lấy ra khỏi hàng đợi và các hành động tương ứng với mẫu thứ hai được thực thi. thứ ba là cố gắng và như vậy cho đến khi không có thêm mẫu để kiểm tra. Nếu không có thêm mẫu nào để kiểm tra, thông điệp đầu tiên được giữ trong hàng đợi và thay vào đó chúng tôi sẽ thử thông báo thứ hai. Nếu điều này phù hợp với bất kỳ mẫu nào, các hành động thích hợp sẽ được thực hiện và thông báo thứ hai sẽ bị xóa khỏi hàng đợi (giữ thông báo đầu tiên và bất kỳ thư nào khác trong hàng đợi). Nếu thông báo thứ hai không khớp, chúng tôi thử thông báo thứ ba và cứ tiếp tục cho đến khi chúng tôi đến cuối hàng đợi. Nếu chúng ta đến cuối hàng đợi, quá trình khối (dừng thực hiện) và chờ cho đến khi nhận được một tin nhắn mới và thủ tục này được lặp lại.
Tất nhiên việc triển khai Erlang là "thông minh" và giảm thiểu số lần mỗi tin nhắn được kiểm tra dựa trên các mẫu trong mỗi lần nhận.

Vì vậy, bạn có thể tạo các prios với regex, nhưng đồng thời được thực hiện qua nhiều quy trình.

Các vấn đề liên quan