我想知道如何避免一个套接字连接pr。Scala 中的线程。我想了很多,但我总是得到一些代码来监听每个客户端连接的传入数据。
问题是我想开发一个应该同时处理几千个连接的应用程序。但是,由于缺乏可伸缩性和上下文切换,我当然不想为每个连接创建一个线程。
什么是“正确”的方法来做到这一点。在我的世界中,应该可以为每个连接设置一个参与者,而无需为每个参与者阻塞一个线程。
我想知道如何避免一个套接字连接pr。Scala 中的线程。我想了很多,但我总是得到一些代码来监听每个客户端连接的传入数据。
问题是我想开发一个应该同时处理几千个连接的应用程序。但是,由于缺乏可伸缩性和上下文切换,我当然不想为每个连接创建一个线程。
什么是“正确”的方法来做到这一点。在我的世界中,应该可以为每个连接设置一个参与者,而无需为每个参与者阻塞一个线程。
在“Programming Scala”一书中,作者使用了一个名为 naggati 的库,它提供了一个结合了 NIO 和 actor 的框架,http ://programming-scala.labs.oreilly.com/ch09.html 。
我有一个将actor与非阻塞套接字(即NIO)混合的应用程序。我这样做的方法是有一个专用的 IO 线程,它使用反应器模式向参与者发送消息(与将工作委托给 Java 系统中的线程池的方式非常相似)。
显然,使用旧的阻塞套接字,每个连接只能使用一个线程。Actor 可以处理这个问题,但是这当然限制了可以同时处理的连接数。
在单个 IO 线程的情况下,这在理论上是一个瓶颈,但在实践中(在我们的观察中)并不多,因为 IO 线程正在执行计算非密集型工作。关于 NIO反应器模式有很多很好的讨论。