Scala方法每个套接字连接使用一个actor

时间:2010-03-24 13:50:34

标签: sockets scala scalability actor

我想知道如何避免一个套接字连接pr。 Scala中的线程。我已经考虑了很多,但我总是得到一些代码来监听每个客户端连接的传入数据。

问题是我想开发一个应该同时处理几千个连接的应用程序。但是,由于缺乏可伸缩性和上下文切换,我当然不希望为每个连接创建一个线程。

这样做的“正确”方法是什么。在我的世界中,每个连接都应该有一个actor,而不需要为每个actor阻塞一个线程。

2 个答案:

答案 0 :(得分:6)

在“Programming Scala”一书中,作者使用了一个名为naggati的库,它提供了一个结合了NIO和actor http://programming-scala.labs.oreilly.com/ch09.html的框架。

答案 1 :(得分:4)

我有一个应用程序将actor与非阻塞套接字(即NIO)混合在一起。我这样做的方法是使用一个专用的IO线程,它使用reactor模式向actor发送消息(就像它将工作委托给Java系统中的线程池一样)。

显然使用阻塞套接字,每个连接只限一个线程。演员可以处理这个问题但当然这限制了可以同时处理的连接数量。

对于单个IO线程,理论上这个 是一个瓶颈,但实际上并没有多少(在我们的观察中),因为IO线程正在进行计算上非密集的工作。 NIO reactor pattern 上有很多很好的讨论。