响应式编程

闲着没事干,人就喜欢网上冲浪,然后找到一个莫名其妙的新名词,随意看看,或许确实有趣,便被莫名其妙得吸引,若是再一时半会儿看不出门道,那就惨了,定会被莫名其妙得套牢,吃不好饭、睡不好觉、手头工作也没心思干,尽想着这事了……这不,晚上睡觉前没啥看,看到个Vert.x与响应式编程,一看就是半天。

响应式编程

提响应式编程,需先说道说道命令式编程。举个例子,我想计算一个a与b的和,并用c表示之,该怎么做呢?

1
2

c = a + b

此处的等于号,便是一处赋值,计算出此时a与b的和,将其赋予c,此处二者间==是成立的,但一旦a、b变换,就不再保证成立了。届时,为了保证等号成立,我们还需要再次计算这个式子,再次赋值才行。这非常自然,符合计算机底层CPU的执行逻辑——取指、摆弄寄存器与内存、计算、摆弄寄存器与内存。

但是,这样的编程在某些情况下是十分复杂的。就拿网上冲浪来说,我在某个文本框修改了一点文本,程序内部对应文本框字段的地方就需要执行getText()来保证二者的同步。这显然是非常繁琐的,对于编程很不友好;再者,回到我们上述的例子,假如我想定义一颗计算树:

1
2
3
4
5

c = a + b
f = d + e
g = c + f
……

那么,在a变换时,为了保证计算树逻辑的成立,就需要连锁执行大量更新,非常不易维护以及出现错误。

响应式编程正是为了规避这个问题而出现的,其类似一系列管道,设立从输入到某个输出的一个映射关系,从而无需保留状态(上述中c、f等即为暂时的一个状态,故需要更新)。这样,当输入a发生变化,位于其上层的g也将自动变换——当然,这样的机制不符合CPU执行的原始逻辑,需要框架支持。

这类编程范式在前端领域得到了很好的应用,如Vue的MVVM以及React的单向数据流,后端领域也有RxJava提供相应支持。

暂时还没空进行实践,之后有空一定实践补上。

Vert.x框架

之前的博文中提及过IO模型,此处的Vert.x框架也是如此。

其中,使用了Event Loop在一个线程中通过轮询事件,来循环执行,故需保证非阻塞。

当然,缺乏实践,我还未具体实施过,之后一定补全。