全网最详细,性能测试-连接池与线程详解,8年测试总结...


前言

连接池

1、什么是连接池?我们为什么需要它?
连接池允许多个客户端使用缓存起来的连接对象,这些对象可以连接数据库,它们是共享的、可被重复使用的。

打开/关闭数据库连接开销很大,连接池技术允许我们在连接池里维护连接对象,这样可以提高数据库的执行命令的性能。多个客户端请求可以重复使用相同的连接对象,当每次收到一个客户端请求时,

就会搜索连接池,看看有没有闲置连接对象。如果没有,要么所有的客户端请求都进入队列排队,要么在池中创建一个新的连接对象(这取决于池里已有多少个连接存在以及配置支持多少连接)。

一旦某个请求使用完连接对象之后,这个对象会被重新放入池中,然后会被重新分派给排队等待的请求(分派给哪个请求要看使用什么调度算法)。

因为大部分请求都是使用现存的连接对象,所以连接池技术大大减少了等待创建数据库连接的时间,从而减少了平均连接时间。

2、如何使用连接池?
连接池在基于网络的企业级应用中很常见,应用服务器负责创建连接对象、添加它们到连接池中,分派连接对象给请求,回收使用完毕的连接对象,重新将它们放回连接池去。

当网络应用创建数据库连接时,应用服务器会从池中取出连接对象,而当它使用完毕之后关闭时,应用服务器又负责将使用完的连接对象放回池中。

3、连接池可以处理多少连接?谁创建/释放连接?
可以进行配置最大的连接数、最小连接数、最大空闲连接数等,所有这些参数都可以由服务器管理员配置。服务器启动时,固定数量的连接对象(配置的最小连接数)被创建,并添加到连接池中。

当客户端请求消耗完所有的连接对象时,再有新的请求都会创建新的连接对象,它们被添加到连接池再分派给这个新的请求,直到设置的达到最大的连接数。

服务器也会一直查看闲置的连接对象数,当检测到闲置的连接数超过设置值时,服务器会关闭闲置连接,然后它们将被垃圾回收。

4、传统的连接池 vs 可管理的连接池
连接池是个开放的概念,任何应用都可以使用这个概念,并用自己想要的方式管理它。连接池概念指的是创建、管理、维护连接对象。

但当应用的规模增大时,如果没有一个健壮的连接池机制的话,管理连接是会得越来越困难。因此,建立一个健壮的、可管理的连接池很有必要。

线程与线程池,连接与连接池

线程:程序执行流的最小单元,进程中的一个实体,一个相对独立的、可调度的执行单元,是被系统独立调度和分派的基本单位;

多线程技术,指在一个进程当中可以创建多个线程来“同时”处理多个事务;

线程池:可以理解为缓冲区,由于频繁的创建销毁线程会带来一定的成本,可以预先创建,但不立即销毁,以共享方式为别人提供服务,一来可以提供效率,再者可以控制线程无线扩张。

连接:指一点与另一点的连接;
连接池:跟线程池有同样的妙处,但连接池可以是基于多线程来实现,也可以通过多进程来实现,也可能是单实例的。

举个例子:
Socket在做为服务时,可以同时监听多个客户端连接,那么它的实现原理就有点像“连接池”;每个客户通过多个端口同时向服务器发送数据,可以认为是多线程,

而服务器可能已经建立好了n个线程来等待同时处理/分析客户端发来的数据,可以为是有个“线程池”。

线程的几种状态

线程在一定条件下,状态会发生变化。线程一共有以下几种状态:

1、新建状态(New):新创建了一个线程对象。

2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权,即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。

3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。

4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。

阻塞的情况分三种:
①等待阻塞:运行的线程执行wait()方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中。进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒,

②同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入“锁池”中。

③其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时,或者I/O处理完毕时,线程重新转入就绪状态。

5、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

每一天都是一个机会,让自己成为更好的人。不要让过去的错误和失败阻止你前进,相反,它们应该激励你变得更加坚强和有决心去追求自己的目标。最重要的是,相信自己,永不放弃。

只有坚定的信念和不懈的努力才能铸就辉煌的人生;要想成为成功人士,必须拥有敢于冒险、勇于创新的精神;只有勇往直前、永不放弃,才能在人生道路上走得更远。

只有拼尽全力,才能看到真正的自己。每一次努力都会获得回报,只要坚持不懈,终将成功。成为更好的自己需要的是行动和耐心,所以不要放弃,继续前进!

猜你喜欢

转载自blog.csdn.net/shuang_waiwai/article/details/131168824
今日推荐