传统的编程模型采用的是每条指令依次执行的方式,如果上一条指令没有执行完,当前线程将先等待,无论如何提升机器性能或者优化代码,都不能改变要得到响应结果需要等待的本质,即便是使用Java多线程编程,每个线程也是按照代码编写的先后顺序执行的。
在本例中,对c进行计算后,得到c的结果才能继续执行对d的计算,如果c长时间得不到结果(比如c是一个HTTP/RPC请求的响应结果),那么d就会被阻塞。
在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序。重排序分为编译器重排序和处理器重排序两种。
· 编译器重排序:编译器保证不改变单线程执行结果的前提下,可以调整多线程语句执行顺序。
· 处理器重排序:如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。
若要实现快速的响应,就得把程序执行指令的方式换一换——将同步方式改成异步方式,方法执行改成消息发送,因此诞生了响应式编程模型。