我刚刚使用Akka编写了一个JDBC连接池。
它使用actor来保存真实数据库连接的“maxPoolSize”集合。调用者向池actor询问连接并收到Future[Connection]
并且连接的状态变为“忙”,直到调用者将其返回到connection.close
的池中。如果所有连接都忙,则新的传入连接请求将被置于等待队列(也由池actor保持)。稍后当返回连接时,将满足等待请求。
这种逻辑的实现在akka中非常容易,只需要几十行代码。但是,当使用BoneCP Multithread Test来测试性能时(即调用者close
在Future[Connection]
返回getConnection
时,会立即建立连接。基准traversed
结果close
的所有Await
请求和Future
),我发现Akka版本比许多其他连接池实现要慢,例如tomcat-jdbc,BoneCP甚至是公共DBCP。
我尝试过调整:
但没有看到明显的改善。
我的问题是:
答案 0 :(得分:2)
要回答问题#1,这不是Akka在速度方面表现优异的用例。您基本上已经解决了一个问题,该问题通常通过为多个读者和编写者优化的并发数据结构来解决,并通过单个actor进行序列化。
答案 1 :(得分:0)
答案 2 :(得分:-1)
Akka可能是高度并行计算的不错选择,而JDBC连接池不是高度并行计算的好例子。