数据库连接池——关键技术点介绍
在 C++ 中,queue 是一种先进先出(FIFO)的顺序容器适配器,它并不直接管理底层的元素存储结构,而是基于某种序列式容器(如 deque 或 list)实现的封装结构。
deque
deque是分段连续的,map实际上是一个vector,vector中存放的是指针,指针分别指向各个缓冲区buffer;
deque的迭代器是一个class,class中包含四个元素:node(指向map),first和last指定当前缓冲区的边界(左闭右开)
start和finish迭代器
CAS原子操作
CAS 原子操作(Compare-And-Swap,比较并交换)是并发编程中的一种原子性同步原语,在多线程或多核环境下,用于实现无锁(lock-free)编程,避免传统加锁带来的性能问题。
CAS 是一种用于实现无锁并发操作的原子指令,通过比较内存中的值与期望值是否相等来决定是否更新变量,常用于原子整型操作等场景,是并发编程中的基础原语。
关键技术点介绍
MySQL数据库编程、单例模式、queue队列容器、C++11多线程编程、线程互斥、线程同步通信和
unique_lock、基于CAS的原子整形、智能指针shared_ptr、lambda表达式、生产者-消费者线程模型
数据库的访问瓶颈:
1.为减少磁盘IO,在服务器和数据库应用之间加一层缓存数据库,比如redis
2.服务器应用和MySQL服务器相当于CS结构,因此可以增加连接池。在高并发情况下,大量的
TCP三次握手、MySQL Server连接认证、MySQL Server关闭连接回收资源和TCP四次挥手所耗费的
性能时间也是很明显的,增加连接池就是为了减少这一部分的性能损耗。
功能介绍
在系统启动时,在服务器端事先创建和mysqlServer一定数量的连接,用户连接请求直接从线程池中取出一条空闲连接执行;
连接池一般包含了数据库连接所用的ip地址、port端口号、用户名和密码以及其它的性能参数
1.初始连接量initSize
**2.最大连接量maxSize:**一般连接池和服务器程序是部署在一台
主机上的,如果连接池占用过多的socket资源,那么服务器就不能接收太多的客户端请求了。
**3.最大空闲时间maxIdle Time: **动态增加的连接数量超过最大空闲时间,就会被回收;
**4.连接超时时间connection Timeout;**当连接数已经达到maxSize并且没有空闲连接可用,通过阻塞获取连接的时间超过connectionTimeout时间,则获取连接失败,无法访问数据库;
开发平台:
windows
压力测试:
验证数据的插入操作所花费的时间,第一次测试使用普通的数据库访问操作,第二次测试使用带连接池
的数据库访问操作,对比两次操作同样数据量所花费的时间,性能压力测试结果如下: