Akka何时会带来更好的表现?

xie*_*fei 9 performance scala akka

我刚刚使用Akka编写了一个JDBC连接池.

它使用一个actor来保存真实数据库连接的"maxPoolSize"集合.调用者向池actor询问连接并接收a Future[Connection]并且连接的状态变为"忙",直到调用者将其返回到池中connection.close.如果所有连接都忙,则新的传入连接请求将被置于等待队列(也由池actor保持).稍后当返回连接时,将满足等待请求.

这个逻辑的实现在akka中非常容易,只需要几十行代码.但是,当使用BoneCP 多线程测试来测试性能时(即调用者close在完成Future[Connection]返回时立即连接getConnection.基准测试traversed所有close请求和Await结果Future),我发现Akka版本比许多其他连接池实现慢例如tomcat-jdbc,BoneCP甚至是公共DBCP.

我试过调试的内容:

  1. 将池actor分成多个,每个都包含所有真实连接的一部分
  2. 调整一些默认调度程序配置参数(吞吐量,并行性)

但没有看到明显的改善.

我的问题是:

  1. 这是一个合适的用例,使用akka会获得更好的性能吗?
  2. 如果是,我如何获得与那些手工制作的线程连接池实现类似或更好的基准数据?
  3. 如果不是,为什么?是否有任何既定标准可以帮助我决定何时使用akka

小智 0

另一种方法是创建Router,它将生成多个从属 Actor,每个从属 Actor 代表一个连接。

但请注意,可能存在潜在的竞争条件。

另外,您使用的 Scala 和 Akka 版本是什么?