左边是VERT.X, Java里面最近比较流行的框架,想要制作的就是Java里的node.js的生态,我们可以看到官方所提供的连接数据库例子。 Client.getConnection,来获取数据库连接,但它不是说立马返回一个连接给到我们,而是提供callback,然后这个result里面表示执行是否成功,如果成功的话,我们可以通过result去拿到 connection。这就是通过义务编程的方式,去让我们在线程里面处理大的逻辑,NGINX就是这样的一种方式。这样代码其实看起来是非常难以维护的,比如在里面需要通过result set去把数据放到缓存里面,又是一个远程调用需要阻塞,可能又是一种callback,这个嵌套会非常深,非常难处理,由于我们都是callback,所以这个站就没法被维持,假如在这个地方有异常就非常难以处理。 现代编程语言是怎么解决这个问题,我们给的答案是协程。ES7、C# 他们都提供协程来帮助解决这类问题。我们以一段Kotlin代码为例,看协程怎么帮助代码改写成非常直观的代码,Kotlin里面通过suspend关键字来表示,函数是可以被挂起的,然后它也可以在 client上新加的方法,新的方法叫Agetconnection。里面调用Kotlin提供的非常 medical的方法,他会获取一个当前执行上下文的connection,让我们getConnection直接调用。getConnection的callback是恢复当前协程的执行,并且把拿到connection作为返回值。这样实际上不用一直占着 CPU资源,实际上调度器会继续去调度其他执行,一旦进行这类封装以后,我们看到代码可以被简化为下面这种形式。
Conn=clinet. AGetConnection();
然后 rs= Conn .aQurerythat(“SELECT * FROM ...”)
这段代码相比左边这段代码那就是大大简化了,但我们要做对这种回调形式进行封装。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。