还有一个非常有用的特性叫做wisp协程,这个特性可以把Java的线程映射为协程,去提高Java的并发处理能力,因为目前都是微服务的状态,微服务把应用拆掉之后,自然不同服务就要通信,通信的就会很多wisp提高这些io的效率。 现在 Java有很多异步编程框架,如 VERT.X这个词的含义就是节点,跟node的jS在图算法里面其实是可以互相代替使用的,VERT.X和 node.js就是想制造一种Java里的node,希望用node的这种异步编程模型得带给Java。 下图是Verte.x编写一个数据库的访问应用,用他官方的一个API:client.getConnection到这里不是直接的返回的connection,而是写一个call back,因为这是一个组词函数,异步的他就要写call back,然后call back里面去判断请求是否成功,成功的话可以拿到result里面一个connection,然后Connection去查一个SQL语句,比如“select*FROM...”,这里同样要写一个call back result to,而不是说直接拿到 connection,一层层的回调,如果我们要继续result再去经营什么,比如说把它放到缓存里面,那里面又会进行一层嵌套的回调。
这样代码的控制就被反转了,并且异常也看不到,如在某一层发生一个异常,因为都是从回调直接执行的,是看不到从哪调进来的,这是异步编程带给我们一个问题,当然异步编程是有解决方法的。 C sharp和ES7所提供的新特性,主要是提供了协程机制,Kotlim程序作为例子,来解释这种机制如何帮助去改变义务变成模型,在Kotlim里面,如果想让一段代码可以被协程切换的话,可以用suspend标记这段代码,然后可以对一个异步函数进行封装,如client.getconnection,把它封装成client.aGet connection,实际做调用了一个非方法叫suspendCoroutine做的是调用这一段代码,并且把当前协程切走,会马上调用 getconnection,并且得到一个continuation的回调,在 get connection的call back,如get connection实际完成的时候,会恢复协程马上挂起,然后再完成恢复,这样就可以让代码临时挂起,过一段时间再回来执行,只有协程可以带给的优势,整个执行站都是保留完整的,通过这种封装可以这样去写代码;Conn=clientaGetconnection,rs=connection=,aQuery同样要进行包装。 这样可以达到异步的一个性能,同时使用完全阻塞方式去写这个代码,非常高效, C sharp的协程的一个解决方案,但是这里对这些带Kotlim的进行封装,其实是非常繁琐的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。