XT0624 发表于 2020-4-29 19:44

求助大佬解惑:MyBatis 空闲池与活动池的问题

本帖最后由 XT0624 于 2020-4-29 19:56 编辑

https://www.cnblogs.com/mkl7/p/10745912.html

如果空闲池还有连接   的话直接拿一个出来用,   如果空闲池没有可用的连接 ,会查看活动池中的连接是否已经达到最大数量    如果活动池中的连接没有达到最大数量, 会创建一个新的连接https://img2018.cnblogs.com/blog/938075/201904/938075-20190421165849455-2003222999.png    如果活动池中的连接已经达到最大数量, 会判断活动池中哪个是最先进来的(Oldest), 然后对该链接进行处理并返回


问题是:如果空闲池容量为10 并且他们都被使用了 那么他们不是都被放到活动池里了么?这个时候活动池应该也满了。为什么还有空闲池里面没有可用连接,活动池还没有到达最大数量这个概念?

井右寺 发表于 2020-4-30 08:39

没用过你说的这个东西
不过以连接池概念来看的话
从池里取连接时,空闲池抛出一个连接,让该连接进入活动池
之前设计的一个连接池时这样子
建立了一个连接池,初始化N个连接放入连接池。当有外部进行连接获取时,连接池扔出一个连接(准确的说是空闲池扔出一个连接,连接池对象里面有两个list,一个空闲池,一个活动池,一个连接只能待在一个池里面)
取连接的时候,会先判断空闲池是否还存在可用连接,如果不存在,判断当前已经创建的连接是否已经到达 设置的最大连接数,如果没有,新建一个连接,并抛出,否则扔出一个繁忙报错(我之前是人的繁忙,连接的强制回收没做,看你用的这个东西,应该是有自己的强制回收的)

XT0624 发表于 2020-5-2 10:57

井右寺 发表于 2020-4-30 08:39
没用过你说的这个东西
不过以连接池概念来看的话
从池里取连接时,空闲池抛出一个连接,让该连接进入活动 ...

我的困惑是:空闲池和活动池是一样大的吗?
如果规定必须一样大,那么查到空闲池没有了可用连接,那么活动池也一定满了,再去查一下,也没有意义。感觉好像做了一步无用功。
如果是不一样大的,那么查到空闲池没有了可用连接,再去先查一下活动池是不是也满了,这个操作我还可以理解。

井右寺 发表于 2020-5-6 13:04

XT0624 发表于 2020-5-2 10:57
我的困惑是:空闲池和活动池是一样大的吗?
如果规定必须一样大,那么查到空闲池没有了可用连接,那么活 ...

应该是不一样大的
之前我的逻辑是 允许最大连接数超出 空闲池大小
当空闲池进行连接回收的时候,根据一定的规则,决定是否将正在回收的这个连接销毁还是重新入池
即允许连接数有一定上浮,上浮完的连接使用完成后 可能会直接销毁也有可能继续入池并再次被取用

井右寺 发表于 2020-5-6 13:14

XT0624 发表于 2020-5-2 10:57
我的困惑是:空闲池和活动池是一样大的吗?
如果规定必须一样大,那么查到空闲池没有了可用连接,那么活 ...

另外,我不太理解为什么需要去查一次
整个连接池对象 是可以维护一个全局状态的,直接查询状态就好啦,没必要去单独遍历 空闲池或者活动池的
页: [1]
查看完整版本: 求助大佬解惑:MyBatis 空闲池与活动池的问题