lau*_*cer 28 scala scalability websocket actor akka
当您需要执行I/O(即数据库操作)时,actor模型(在Akka中)如何工作?
我的理解是,阻塞操作会引发异常(并且由于Akka使用的Netty的自然性质而基本上破坏了所有并发性).因此我将不得不使用Future或类似的东西 - 但我不理解并发模型.
future(即.future.get())中进行了一个阻塞调用,它只会阻止当前actor的执行; 还是会阻止所有参与者的执行,直到阻止呼叫完成?基本情况是这样的:
有没有更好的方法来实现这一目标?
Ray*_*urg 28
阻塞操作不会在Akka中抛出异常.你可以阻止来自Actor的调用(你可能想要最小化,但这是另一个故事).
至于netty(我假设你的意思是远程演员,因为这是在Akka中唯一使用netty的东西),如果你担心的话,尽快将你的工作传递给当地演员或未来(带回调)关于时间安排或阻止netty以某种方式完成它的工作.
par*_*tic 10
阻塞操作通常不会抛出异常,但等待未来(例如通过使用!!或!!!发送方法)可能会抛出超时异常.这就是为什么你应该尽可能地坚持使用即发消失,使用有意义的超时值并尽可能选择回调.
akka actor不能连续显式处理多个消息,但您可以throughput通过配置文件来播放该值.然后,如果它的消息队列不是空的,那么actor将处理几个消息(即它的receive方法将被顺序调用几次):http://akka.io/docs/akka/1.1.3/scala/dispatchers.html#id5
在actor中阻塞操作不会"阻止"所有actor,但如果你在actor之间共享线程(推荐用法),调度程序的一个线程将被阻塞,直到操作恢复.因此,尽量尽量编写期货,并注意超时价值.
3和4.我同意Raymond的回答.