0

我正在尝试在 Java 中使用 GPars 来处理几种类型的消息。每种消息类型都有一个参与者。

但是消息处理需要很多时间,而消息不断涌现。我需要在演员忙的时候忽略即将到来的消息(只是把它们扔掉)。

我怎么知道 GPars 演员是否忙?我知道Actor.isActive()方法,但我不太确定它是不是问题(JavaDoc 非常模棱两可且不清楚),而且我找不到任何有用的信息。

4

2 回答 2

0

一般来说,这可能是有问题的,因为参与者一次只能处理一条消息,无论您必须这样做的任何解决方案,都会有限制。例如,您可以在一个演员中拥有一个演员、一个主管和一个工人。

工人演员是实际工作的人。发生的事情是将工作发送给主管。主管有一个布尔变量,例如 isBusy,最初为 false。当收到工作时,主管将变量设置为 true,并将工作传递给工作人员。工作完成后,工作人员将结果发送回主管,主管将 isBusy 设置为 false 并返回结果。

如果在 isBusy 为 false 时收到另一条消息,主管可以只发回一条消息,例如 isBusy 消息,或者不执行您所说的您想要的任何操作。

请注意,如果 worker 崩溃或重新启动,isBusy 仍然为 true。如果它能够满足您的需求,您将需要考虑此解决方案。也许有一个邮箱会更好,我不知道。

无论你做什么,你都应该尽力避免造成你的actor系统处于糟糕状态的情况,祝你好运。

于 2016-08-15T01:21:30.937 回答
0

恐怕没有内置的方法来确定这一点。您必须自己实现一个忙控制算法,可能基于 CountdownLatches。

于 2016-06-29T16:04:09.063 回答