rust mysql 连接池 mysql连接池是什么
转载
- 就是数据库和服务端的连接,与客户端无关,因此服务端可初始化所有Mysql连接
- 结构体:
- 连接池名
- 服务端ip和,用户名密码,db名
- 最大连接数,最小连接数
- 设置太多:资源浪费,启动慢
- 设置太少:后续处理慢
- 初始化后的连接放到vector或stack里,非空连接放队列(链表)里,这样获取非空连接时很快
- 链表中的连接如果很久没有返回,就认为超时,进行释放
- 装载客户端与服务端的socket连接结构体 (原目ip,原目端口)
- socket连接池的目的是实现通过socket连接复用,实现TCP长连接(TCP连接开销太大)
- 空闲连接:一个连接暂时没有数据处理,就处于空闲状态,放到空闲链表中去
- KeepAlive机制(心跳机制):如果很久这个连接没有数据到来,就释放。链路默认时间为5分钟
- 主线程新建多个子线程,子线程创建后就会开始执行线程入口函数。
- 线程初始化状态应该让每个线程都处于休眠状态,因此,线程入口函数有一段代码while(消息队列是否为空,且线程池需处于开启状态m_shut=false){等待休眠(条件变量,互斥量)},初始化时消息队列肯定为空,所以每创建一个线程都会进入这个循环进行休眠。直到被唤醒,去读取消息队列。
- 目的是为了利用地址空间碎片
- 一般大于128K的内存直接在堆里申请,小于128K的内存组织成链表进行分配。可参考TCMalloc
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。