2012-01-02 31 views
6

Tôi đã suy nghĩ, tôi muốn có thể gán các thông điệp khác nhau các ưu tiên khác nhau khi nói chuyện với một quá trình xóa.Có cách nào thông minh để đưa ra các thông điệp ưu tiên khác nhau không?

Tôi muốn có thể xử lý các thư có mức ưu tiên cao đầu tiên và sau đó ưu tiên thấp một lần.

phương pháp khác nhau tôi đã cố gắng, cách tiếp cận 1:

loop() -> 
    receive 
     {high, Msg} -> 
      Do something with the message, 
      loop() 
     after 0 -> 
      ok 
    end, 
    receive 
     {low, Msg} -> 
      Do something with the message, 
      loop() 
     after 0 -> 
      loop() 
    end. 

này không được công việc, nhưng nó là yên tĩnh chậm. Tôi đoán nhận được phải xem xét thông qua tất cả các tin nhắn để xem nếu có một 'cao' tin nhắn mỗi khi nó chạy.

Phương pháp 2:

Tôi cũng đã cố gắng thực hiện một cách tiếp cận kiểu hòa giải nơi thư bị bộ đầu tiên vào một 'trước bàn' the 'trước bàn' sau đó gửi tin nhắn cho một trong hai cao hàng đợi hay -queue thấp, và sau đó cuối cùng là một 'công nhân' chủ đề được yêu cầu công việc từ firsk the-hàng đợi cao, và nếu hàng đợi mà không có gì, sau đó từ-queue thấp, như ilustrated đây:

enter image description here

này có Nhược điểm của việc phải đợi yêu cầu để có được mặt trước của các hàng đợi khác nhau, có lẽ một số loại hệ thống ưu tiên sẽ hoạt động:)

Có cách nào thông minh hơn để làm điều gì đó như thế này không?

Trả lời

11

Tôi nghĩ bài viết này trả lời câu hỏi của bạn:

https://www.erlang-solutions.com/upload/docs/9/erlang11-nystrom.pdf

Về cơ bản bạn muốn có một nhận như sau:

receive 
    {hi_priority, Msg} -> Msg 
after 0 -> 
    receive 
    Msg -> Msg 
    end 
end 

Như tài liệu Erlang cho biết "sau 0" có nghĩa là thời gian chờ sẽ xuất hiện ngay lập tức nếu không có thông báo trùng khớp (ưu tiên) trong hộp thư.

Tôi không biết về bất kỳ cách thông minh hơn để làm việc đó :)

+2

Awesome, Fhat là chỉ là những gì tôi đang tìm kiếm :-) –

+0

Liệu nhận hồ sơ sau khi thông điệp 'không quan trọng' được đọc? Vì vậy, nếu tôi không có bất cứ điều gì quan trọng tại thời điểm này nó sẽ tiếp tục chờ đợi một cái quan trọng sau khi đọc những người không quan trọng? – Bula

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