vertx异步驱动vertx-mysql-postgresql-client

文章主要介绍vertx中的mysql异步client。

1:解释mysql异步驱动,这儿举一个场景,当客户端发起一个请求到后端来,后端通过处理需要操作db。之前的阻塞式驱动,需要后端处理请求的线程阻塞在这儿,等待,与db的io操作返回相应的数据,当使用异步驱动后,处理业务请求的线程,只需要把要做的事情交给异步驱动,他就不管了,去做其他事情,不阻塞这个业务线程。

2:解释下,阻塞与不阻塞之间的区别,

2.1:在java的线程模型里面,用户态线程与内核态线程是1:1的关系,当用户态线程阻塞,内核态线程也会阻塞,cpu在调度线程的时候,一个cpu核心同时只能做一件事情,当线程阻塞越多,会造成cpu的有效计算效率下降很多,也会造成大量的线程上下文切换,但是在java这样的线程模型下,,有线程阻塞了,你又不得不,起新的线程来继续做事情。

2.2:无阻塞,通过一些解决方案,达到,内核态线程无阻塞,真正做事情,cpu其实只要有相对应的线程数,性能就会非常高。在vertx中实现无阻塞的方式,是通过代码层面来控制的,他把需要阻塞的代码,当成一个事件提交到自己的一个事件池,线程只会不断的取事件来执行。

3:vertx提供的mysql异步驱动,底层依赖postgresql-async_2.12,我看过这个框架的源码,他底层是用netty去实现跟db做io交互,这样,他自身需要少量的线程就可以支撑多个连接,大致的执行方式是,vertx的业务线程执行需要操作db的时候,把要做的事情,交给postgresql-async_2.12,业务线程就回去继续执行其他事件,当postgresql-async_2.12这边netty拿到db响应的结果后,就会去激活,业务线程当时为这个事件注册的handler,那么这个handler又可以被线程继续执行。这样来实现,在操作db的时候,也没有任何线程会阻塞。

4:vertx这边几乎提供了异步rpc,异步访问其他第三方需要发起http请求,异步操作redis,或者kafka,等等。目前也有相对完整的生态。本人也实现,用vertx+hazelcast在k8s上做服务网格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值