响应式编程(一)

一、异步编程

Event Channel的出现减轻了Subcriber的压力

二、概述

类似JAVA有万物皆对象

2.1)Reactor官方弹出图

传统onClick()方法中判断双击不好写

2.2)发展历史

2.3)Reactive Stream 规范

主要有右侧四个接口角色,相较于传统的异步编程,Subscriber多了request(n)进行背压处理,还可以cancel()取消订阅;而且通过onError | onComplete增加了生命周期处理(传统的异步编程没法知道谁在运行代码处理异常不知道抛给谁,也不知道事件完成后是否需要释放资源)

2.4)Project Reactor 特性(Java的实现)

先出规范后有实现,比如先有Java规范后有虚拟机实现

三、Subscriber

Nothing happened until Subscriber() 的意思是在订阅之前比如上文双击时间,只有订阅后上述转换函数才会真正执行

四、创建Flux & Mono

4.1)接口文档

Flux
Mono(只有一个事件,完全可以转成Flux)
Subscriber需要解决的问题是不知道有多少个Event调用onNext(),多了压力就可能使系统奔溃——所以需要做背压处理

4.2)API

创建流
generate()可以一直执行下去
sink.complete()可以结束generate()
http调用,在WebFlux中常将Mono转来转去
可定时产生Event
把两个Event Stream合并成一个新的Event Stream
像拉链一样一对一匹配(自定义一对一匹配规则)
转换函数

五、命令式编程风格到函数编程风格的转换

左边同步,右边异步——异步好处把处理循序交给框架托管,第一步没完成第二步不会等待

六、重温flatMap

异步里边有异步——地狱回调
尽可能快订阅指假如圆圈中的方形Event有IO或者RPC之类,为了解决nothing happened until subscribe()就会先将所有圆圈订阅完——concatMap最严格,其次是flatMapSequential(常用)
正常一一映射只能得到两个圆圈,但是flatMap()将圆圈里边的东西扁平化处理成方形的映射

七、背压(backpressure)

响应式编程使得不同语言进行通讯的过程中可以商讨背压策略
继承BaseSubscriber<T>用来自己实现较复杂的Subscriber——subscription.request(n)为主动背压策略
onBackpressureBuffer()为防御策略 

八、Hot publisher vs Cold publisher

大部分应用场景都用Cold publisher
不常见

九、线程相关

提高吞吐量

9.1)publishOn

从publishOn开始设置一个队列处理最后两步,由于在不同线程中处理,所以一个Event从上到下执行所有步骤的时刻不一定匹配,所以要一个Queue,publishOn从Flux里拉到Queue中的时候角色是Subscriber,publishOn从Queue中推给Thread A的时候角色是Publisher
publishOn改变了后续op3,op4等步骤运行在黄色线程,subscribe控制从头开始运行的op1,op2等步骤还是在蓝色线程运行

9.2)subscribeOn

subscribeOn改变了subscribe本来在蓝色线程中运行,这样从头开始所有步骤都会运行在黄色线程中

9.3)publishOn mixsubscribeOn

虽然有subscribeOn改变了subscribe运行的线程,但是后续的publishOn截断将op4改为了绿色线程中运行

9.4)subscribe() on another Thread

在非主线程中执行subscribe

十、Flux vs Stream

Stream只是函数式编程的工具,Reactor在函数式编程的基础上引入了Event的概念
从上到下都需要是响应式中间一层响应式意义不大,初学者和容易将响应式编程写成同步代码占用主loop


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容