00:00
刚才我们说基本本地所好像可以解决并发性问题。但是呢,有三种情况啊,可能会导致导致所机制失效,导致所失效,那么哪三种情况呢?咱们来一一去分析,并且演示一下啊,第一种情况就是多利模式可能会导致锁机的失效。那我们不管是lock还是synchize的,它们都属于对象所。就是呢,所有请求进来之后呀,它必须得是同一个操service对象,那我们才能锁得住啊,那如果不是单立的呢。那那如果是单立的,所有请求进来都是同一个stop service。啊,那么它都是同一个对象。那咱样去获取这个对象的组。那么,如果我们是独立的。那就导致什么情况,他每次请求进来,他有自己的to service对象,那再一个请求进来,又一个to service对象。
01:07
他对象都不一样了。还能锁住吗?好,我们来演示一下啊。默认情况下,奔容器它这里呢,使用的是单利模式。所有请求呢,都是同一个对象啊。那我们呢,来给它换成多粒的,咱可以通过Co注解啊来切换一下。那默认情况下呀,Spring呢,它使用的是single啊。Single ten,那只要对死啊IOC稍微了解一点,那都知道它是single啊,单立的。那我们呢,可以切换到多利的叫pro proto type啊多利模式。那么切换完之后呢,我们来去重新启动我们的服务。啊,服务呢,启动啊,应该问题不大。已经启动啊,启动成功了。那么切入成功之后呀,我们来回到数据库里面啊,把数据库的库存重新改成5000件库存,那么改好之后呢,我们再使用解密压力测试工具,可以压一下,把这个呢给它清空。
02:14
清空掉之后呢,我们来去运行。来看我们的吞吐量。啊,依然是应该是500多分涂料啊。那么然后呢,错误率是0%。5000个请求啊,也发送完了,但最终库存余量多少呢?零。哎,好像多利模式也没有影响我们的锁机呀。啊,其实这样子的啊,虽然我们已经指定为pro了,但它依然还是单立模式。因为你除了去指定product之外,你还得要去指定代理模式,它才能使用多利模式啊。那在这里有一个配置叫pro model这样的一个玩意儿。那它默认情况下值是多少呢?啊值呢,是Co model model啊model啊这么个玩意儿是default。
03:03
那么这个东西呢,呃,默认就是它等价于什么,等价于no这个。啊,相当于你就没有指定这个代理模式。好,那我们可以指定,为啥呢?可以指定为interface,还有呢,Target class这两种。如果你是GDK代理啊,GDK做的代理,咱要使用这个玩意儿。如果你是CD代理的话,那我们可以使用target class,那我们知道JD代理呢?它是基于接口的。而我们的CD代理是基于类的啊。好,那我们默认情况下。咱都是喜欢使用这个代理。但是也不是这样子的啊。在spring里面,如果你玩的是原生的spring啊,它默认是GD代理,那一般的我们要定义service,要先定义service接口。啊,再写对应的实现类。那我们现在呢,其实只写了实现类,因为在spring boot里面啊,那么二点差以后,那么它默认呢,使用的是JDK代理了哈,使用是CD类代理了哈。
04:10
C代理这单一般呢,不用写接口了。而且呢,我这里也没有接口,只有实现类。所以呢,我只能选择使用这个玩意儿软硬代理。那我指定为target class这样一个东西,那回到这里来,那咱可以使用这个scoop。Prox model target。来开启我们的CD level代理啊。那我们来重新启动咱们这个工程,此时我们的多利模式才能生效。好,启动成功之后呢,我们再把库存数量改成5000,改成5000,改好之后呢,我们再使用压力测试工具,我们来压一下,把这个呢给它清空掉。
05:01
来执行压力测试。那么并发量你很明显的上来了啊啊,将近2000的并发量吞吐量,在那5000的星球全部都成功了啊。那么库存数量有没有减为零呢?来看,出现了4850。那跟没有加锁之前差不多啊,性能呢也差不多。那说明呢,已经出现了并发性的问题。好,那么咱多利模式呢,我们可以发现啊,那么所机制呢,已经失效了。
我来说两句