每个套接字连接使用一个 actor 的 Scala 方法
我想知道如何避免一个套接字连接pr。 Scala 中的线程。我想了很多,但最终我总是得到一些代码,这些代码正在侦听每个客户端连接的传入数据。
问题是我想开发一个应用程序,它应该同时处理大约几千个连接。然而,我当然不想为每个连接创建一个线程,因为缺乏可扩展性和上下文切换。
执行此操作的“正确”方法是什么?在我的世界中,每个连接应该可以有一个参与者,而不需要为每个参与者阻塞一个线程。
I am wondering how it is possible to avoid one socket connection pr. thread in Scala. I have thought a lot about it, but I always end up with some code which is listening for incoming data for each client connection.
The problem is that I want to develop an application which should simultanously handle perhaps a couple of thousand connections. However I will of course not want to create a thread for each connection because of the lack of scalability and context switching.
What would be the "right" way to do this. In my world it should be possible to have one actor for each connection without the need to block one thread per actor.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我有一个将参与者与非阻塞套接字(即NIO)混合在一起的应用程序。我这样做的方法是拥有一个专用的 IO 线程,它使用反应器模式向 actor 发送消息(与将工作委托给 Java 系统中的线程池的方式大致相同)。
显然,使用旧阻塞套接字,每个连接只能使用一个线程。演员可以处理这个问题,但这当然限制了可以同时处理的连接数量。
在单个 IO 线程的情况下,这在理论上是一个瓶颈,但在实践中(根据我们的观察)并不多,因为 IO 线程正在执行计算非密集型工作。 NIO 上有很多很好的讨论 反应器模式。
I have an application that mixes actors with non-blocking sockets (i.e. NIO). The way I have done this is to have a dedicated IO thread, which sends messages to actors (in much the same way it would delegate work to a thread pool in a Java system) using the reactor pattern.
Obviously using the old blocking sockets, you are restricted to one thread per connection. And actor could handle this but of course this places a restriction on the number of connections which can be handled simultaneously.
In the case of a single IO thread, this is a bottleneck in theory but not much in practice (in our observations) as the IO thread is doing computationally non-intensive work. There are plenty of good discussions to be found on the NIO reactor pattern.
在《Programming Scala》一书中,作者使用了一个名为 naggati 的库,它提供了一个结合 NIO 和 actor 的框架, http://programming-scala.labs.oreilly.com/ch09.html。
In the book "Programming Scala" the authors used a library called naggati which provides a framework that combines NIO and actors, http://programming-scala.labs.oreilly.com/ch09.html.