Là in my own answer to my own question, tôi có tình huống theo đó tôi đang xử lý một số lượng lớn sự kiện đến trên hàng đợi. Mỗi sự kiện được xử lý chính xác theo cùng một cách và mỗi sự kiện có thể được xử lý độc lập với tất cả các sự kiện khác.Xử lý đồng thời trong Scala
Chương trình của tôi tận dụng khung công tác đồng thời Scala và nhiều quy trình liên quan được mô hình hóa là Actor
s. Vì Actor
xử lý thông điệp của chúng theo tuần tự, chúng không phù hợp với vấn đề cụ thể này (mặc dù các diễn viên khác đang thực hiện các hành động mà là tuần tự). Như tôi đã muốn Scala để "kiểm soát" mọi tạo vật chủ đề (mà tôi giả định là điểm của nó có một hệ thống đồng thời ở nơi đầu tiên) có vẻ như tôi có 2 lựa chọn:
- Gửi các sự kiện vào một hồ bơi của sự kiện bộ vi xử lý, mà tôi kiểm soát
- được
Actor
tôi để xử lý chúng đồng thời bởi một số cơ chế khác
tôi đã có thể nghĩ rằng # 1 phủ nhận quan điểm của việc sử dụng các hệ thống phụ diễn viên: bao nhiêu diễn viên xử lý nên tôi tạo không? là một câu hỏi rõ ràng. Những điều này được cho là ẩn từ tôi và được giải quyết bởi hệ thống con.
câu trả lời của tôi là phải làm như sau:
val eventProcessor = actor {
loop {
react {
case MyEvent(x) =>
//I want to be able to handle multiple events at the same time
//create a new actor to handle it
actor {
//processing code here
process(x)
}
}
}
}
Có một cách tiếp cận tốt hơn? Điều này có đúng không?
chỉnh sửa: Một cách tiếp cận có thể tốt hơn là:
val eventProcessor = actor {
loop {
react {
case MyEvent(x) =>
//Pass processing to the underlying ForkJoin framework
Scheduler.execute(process(e))
}
}
}
Mặc dù các diễn viên dường như không hỗ trợ trực tiếp một nhóm công nhân, nhưng điều này rất hữu ích trong việc vạch trần sự thiếu hụt này. Tất cả tài liệu có sẵn cho tôi, không đề cập đến điều này một cách rõ ràng. – ePharaoh