Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 阿克卡什么时候能带来更好的表现?_Performance_Scala_Akka - Fatal编程技术网

Performance 阿克卡什么时候能带来更好的表现?

Performance 阿克卡什么时候能带来更好的表现?,performance,scala,akka,Performance,Scala,Akka,我刚刚用Akka编写了一个JDBC连接池 它使用一个actor来保存真实数据库连接的“maxPoolSize”集合。调用者向池参与者请求连接,并收到一个Future[connection],连接状态变为“busy”,直到调用者在connection上将其返回池中。关闭。如果所有连接都忙,新的连接请求将被放置在等待队列中(也由池参与者持有)。稍后,当连接返回时,等待请求将得到满足 这个逻辑在akka中的实现非常简单,只需要几十行代码。但是,当使用BoneCP测试性能时(即,当getConnecti

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

它使用一个actor来保存真实数据库连接的“maxPoolSize”集合。调用者向池参与者请求连接,并收到一个
Future[connection]
,连接状态变为“busy”,直到调用者在
connection上将其返回池中。关闭。如果所有连接都忙,新的连接请求将被放置在等待队列中(也由池参与者持有)。稍后,当连接返回时,等待请求将得到满足

这个逻辑在akka中的实现非常简单,只需要几十行代码。但是,当使用BoneCP测试性能时(即,当
getConnection
返回的
Future[connection]
得到满足时,调用方
close
立即关闭连接。基准
遍历了所有
close
请求,并
等待
结果
Future
),我发现Akka版本比许多其他连接池实现(如tomcat jdbc、BoneCP甚至commons DBCP)都要慢

我尝试进行的调整:

  • 将池参与者拆分为多个池参与者,每个池参与者持有所有真实连接的一部分
  • 调整一些默认dispatcher配置参数(吞吐量、并行度)
  • 但没有看到明显的改善

    我的问题是:

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

  • 另一种方法是创建,这将产生几个从属参与者,每个参与者代表一个连接

    但请注意,可能存在潜在的种族条件


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

    要回答问题1,这不是Akka在速度方面表现出色的用例。您基本上已经解决了一个问题,这个问题通常是通过为多个读写器优化的并发数据结构来解决的,并通过一个参与者将其序列化。

    Akka可能是高度并行计算的一个好选择,而JDBC连接池不是高度并行计算的一个好例子。

    惊讶毫不怀疑您的开发技能,但是这些其他LIB有相当多的开发时间用于解决这个非常具体的问题。我很乐意看到#3点的答案!我认为#3在这里得到了很好的介绍:当所有连接都消失时,基准测试是如何运行的?驱动程序锁定了吗?我会在代码中搜索一些阻塞行为。如果只有几十行,也许你可以把它贴在这里?来看看stackoverflow!这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时对自己的帖子发表评论,一旦您拥有足够的声誉,您就可以对任何帖子发表评论。请阅读指导原则以获得正确答案:。