当前位置: 首页 > news >正文

kotlin -- Flow和Rxjava 对比

引言

我们先说说,关键词   响应式编程,数据流,观察者模式。

观察者模式

一个button setOnClickListener  就是观察者模式。

button是被观察者,它产生一个事件(点击),观察者OnClickListener接收到,做出相应的处理,而setOnClickListener就是订阅者,它将两者连接起来。

函数响应式编程

  • 响应式编程(Reactive Programming RP):万物皆可视为数据流,比如:用户的操作,网络数据,某个代码状态变更

  • 函数式编程(Functional Programming FP):将逻辑抽象为旧数据如何映射为新数据。(比如rx或者kotlin里的各种操作符)

  • 函数响应式编程(Reactive Functional Programming RFP): 将数据流的各种操作(创建,结合,过滤等)抽象为函数(操作符),使得数据流可以自由的组合这些函数实现各种数据流的映射

RXJAVA

ReactiveX是Reactive Extensions的缩写,一般简写为Rx,Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流。Rx的大部分语言库由ReactiveX这个组织负责维护,比较流行的有RxJava/RxJS/Rx.NET,社区网站是 reactivex.io。

ReactiveX.io给的定义是,Rx是基于观察者模式的实现了异步编程接口,ReactiveX结合了观察者模式、迭代器模式和函数式编程的精华。Rxjava则是Reactive Extensions的java实现

简单说,Rxjava是函数响应式编程思想的一种体现,基于观察者模式实现的一种异步编程接口。

原理

 被观察者 (Observable) 通过 订阅(Subscribe) 按顺序发送数据 给观察者 (Observer), 观察者(Observer) 按顺序接收事件 & 作出对应的响应动作。

特点:

  • 操作符丰富

  • 支持背压

  • 支持线程切换操作

  • 学习成本和上手难度较高

FLOW

Flow是kotlin提供的一个工具( kotlinx 包下的组件),它也是函数响应式编程(RFP)思想的一种体现,也是使用的观察者模式,但拥有尽可能简单的设计, 对 Kotlin 以及协程友好且遵从结构化并发

特点:

  • 支持线程(协程)

  • 跟协程绑定的比较多

  • 支持背压

  • 操作符和rx整体来说差不多

  • 学习成本低(前提是得会协程)

总结

两者其实差不多。

http://www.lryc.cn/news/419443.html

相关文章:

  • 【JVM篇】自动内存管理——HotSpot虚拟机对象探秘
  • 代谢组数据分析(十七):基于structToolbox代谢组分析流程讲解
  • 科普课堂走起 | 什么是网络安全和数据安全?
  • C语言中常用的函数
  • 如何在SpringBoot中进行单元测试?
  • 分布式事务学习整理
  • Conda配置瘦身术:精通conda config --remove命令
  • Windows下编译安装PETSc
  • phpstudy搭建sqlilabs本地靶场
  • Linux 实验基础环境准备(外网篇)
  • centos8 安装mysql 制作备份数据库脚本
  • Parsing error: The keyword ‘interface‘ is reserved配置优化
  • C语言指针详解-包过系列(二)目录版
  • 驰骋BPM RunSQL_Init SQL注入漏洞复现
  • 谷粒商城实战笔记-143-性能压测-压力测试-JMeter在windows下地址占用bug解决
  • Pod的调度机制
  • JIT(即时编译)编译器
  • 循环执行时数据的同步方式
  • Jvm G1与ZGC启动参数
  • zdpgo_gin_zap 整合zdpgo_gin框架和zdpgo_zap框架的日志中间件,用于实现路由日志记录
  • FOC电流环
  • 工业设备数据采集方案的设计实施与应用-天拓四方
  • 【MySQL】索引——索引的实现、B+ vs B、聚簇索引 VS 非聚簇索引、索引操作、创建索引、查询索引、删除索引
  • 剖析HTML 元素——WEB开发系列02
  • 影响3D打印零件品质的关键因素探析
  • Oracle事务是怎么练成的
  • 线程与多线程(一)
  • 连接其他主机上的redis连接不上`telnet: Unable to connect to remote host: Connection refused`
  • dijkstral算法详解
  • 创意指南丨AR数学沉浸式空间体验