作为in my own answer to my own question,我遇到了处理大量到达队列的事件的情况。每个事件都以完全相同的方式处理,每个事件甚至可以独立于所有其他事件进行处理。在Scala中同时处理
我的程序利用了Scala并发框架,并且涉及的许多过程都被建模为Actor
s。由于Actor
按顺序处理它们的消息,它们不太适合这个特定问题(尽管我的其他演员正在执行为连续的动作)。因为我想斯卡拉“控制”的所有线程的创建(我假设是具有在首位并发系统它的点),看来我有两个选择:
- 事件发送到事件池处理器,这是我控制
- 让我
Actor
来处理它们同时通过一些其他的机制
我本来以为#1否定使用的演员子系统的一点:多少处理器的演员,我应该创造?是一个明显的问题。这些东西对我来说是隐藏的,并由子系统解决。
我的回答是做到以下几点:
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)
}
}
}
}
有没有更好的方法吗?这是不正确的?
编辑:一个可能是更好的方法是:
val eventProcessor = actor {
loop {
react {
case MyEvent(x) =>
//Pass processing to the underlying ForkJoin framework
Scheduler.execute(process(e))
}
}
}
尽管演员似乎并不直接支持工作人员,但这一问题有助于揭示这一缺陷。 所有可用的文档,不明确提及这一点。 – ePharaoh 2009-07-02 15:08:23