响应式编程
在传统的编程方式中是顺序执行的,上一个任务没有完成的话需要等待直至完成之后才会执行下一个任务。如果需要响应迅速,就得把同步执行的方式换成异步,方法执行变成消息发送。这变成了异步编程的方式,它是响应式编程的重要特性之一。
特点
(1)异步编程
提供了合适的异步编程模型,能够挖掘多核CPU的能力、提高效率、降低延迟和阻塞等。
(2)数据流
基于数据流模型,响应式编程提供一套统一的Stream风格的数据处理接口。和Java 8中的Stream相比,响应式编程除了支持静态数据流,还支持动态数据流,并且允许复用和同时接入多个订阅者。
(3)变化传播
简单来说就是以一个数据流为输入,经过一连串操作转化为另一个数据流,然后分发给各个订阅者的过程。这就有点像函数式编程中的组合函数,将多个函数串联起来,把一组输入数据转化为格式迥异的输出数据。
函数式编程
函数式编程是种编程方式,它将电脑运算视为函数的计算。和过程化编程相比,函数式编程里函数的计算可随时调用。
函数式编程通过消除全局状态,解决了过程式编程中出现的问题。函数式程序员依靠的是不使用或不改变全局状态的函数,他们唯一使用的状态就是传给函数的参数。一个函数的结果通常被继续传给另一个函数。因此,这些程序员通过函数之间传递状态,避免了全局状态的问题,也因此消除了由此带来的副作用和其他问题。
过程化编程
过程式编程,数据存储在全局变量中,并通过函数处理。
由于我们将程序的状态都存在全局变量中,如果程序慢慢变大就好碰到问题。程序规模扩大,可能会在多个函数中使用全局变量,我们很难记录都有哪些地方对一个全局变量进行了修改。例如:某个函数可能改变了一个全局变量的值,在后面的程序中又有一个函数改变了相同的变量,因为写第二个函数时程序忘记了已经在第一个函数中做了修改。会严重破坏程序的数据准确性。
弊端:程序功能变多,全局变量变多,最后随着程序规模变大需要修改变量,很快程序将无法维护。这种编程方式也会有副作用(side effects),其中之一就是会改变全局变量的状态。使用过程式编程时,经常会碰到意料之外的副作用,比如意外递增某个变量两次。