前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >响应式编程

响应式编程

作者头像
春哥大魔王
发布2019-11-19 12:50:51
1.4K0
发布2019-11-19 12:50:51
举报

写在前面

之前发了一篇Reactor到WebFlux,WebFlux整套技术栈是由Spring提供的,Pivotal致力于解决java在云平台上的工作负载。

erlang这种80年代的语言就提出了响应式编程模型,为什么最近流行起来了?

原因有:硬件多核cpu,虚拟化云计算,软件系统可以轻易获得更高性能,系统需要更快的响应,系统规模变得超载,需要更好的利用系统资源。

响应式宣言:更灵活的系统,能够容忍失败,更好地处理失败事件,更有效。

响应式编程特点

响应式编程不会让你的系统更快,但可以让你的系统更加高效,是一种非阻塞编程模型,面向未来的编程模型。

响应式编程在进行同步操作时,不会占用线程,在传统的servlet模型时,在进行跨服务调用时,等待响应结果时,依然会占用线程,对于内存而言线程是沉重的。

在同一条线程中需要等待和返回或者在不切换线程情况下执行一系列操作,这种场景下响应式编程会比较高效,框架会优化尽量让你的操作在一个线程上执行。

异步编程和响应式编程的区别:他们应用于相同领域,不同在于响应式编程有pull,push,和背压。

响应式真正意义在于打破servlet api的单线程连接,响应式编程在web层的意义在于能更合理的使用线程。

响应式编程和函数式编程一样,应该在合适的地方运用而不是强行使用它。

为了解决背压在网络中的应用,和Rsocket进行了合作,Rsocket是为了替代http信息和指令的异步传递。

响应式编程框架思想

rxJava2和Spring Reactor开发是一拨人,rxJava是对于2014年响应式编程标准的实现,Spring Reactor是对于2017年响应式编程标准的实现,rxJava推荐1.8之前使用,也只部分支持响应式编程,Spring Reactor推荐1.8+使用,Spring Reactor是真正的非阻塞响应式编程。

Mono和Flux类似于一个小票,在调用服务得到结果之前,不会阻塞,可以异步在完成任务之后通过小票获取结果返回响应。

响应式编程四种角色:publisher,subscriber,processor,subscription。

publisher发消息 —> subscription订阅消息 —> subscriber消费消息。

面对失败,传统方式通过try catch,响应式编程将失败看作一个事件,需要响应处理,其他任务还需要继续。

响应式编程中发布的事件只有对他感兴趣的订阅者才会处理,消息驱动是先订阅再处理。

设计模式的选择:观察者模式,迭代器模式,状态管理和持久模式,流程模式,消息流模式等。

响应式和微服务关系:利用消息驱动,异步非阻塞性质。

背压就是断路器。

写在后面

响应式编程是面向未来的编程模式,未来的世界是过载的,通过响应式编程可以最大限度的发挥系统的资源能力。

数据库存储还没有支持响应式,因为他们还是具体响应式io实现,jdbc是一种阻塞命令式的api,没法在异步编程中使用,社区有R2DBC响应式的jdbc。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 春哥talk 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档