跟我学代码架构设计模式之--命令式编程、流式编程、异步、同步、阻塞非阻塞概念理论大一统

一直以来各种编程概念充斥于耳-命令式编程、流式编程、函数式编程、异步编程、同步编程、阻塞编程、非阻塞编程、reactor模型、、潜意识里我总觉的这些概念之间有关联又没有关联的样子,今天我总于有所领悟----它们之间是围绕着一个理论基础的!!!即---数据推拉模型的不同!!!

看本文之前请先看我上篇文章,我的观点如下:

首先命令式编程是数据“拉”模型,我们的业务代码要负责数据的拉取,然后处理,由于是业务主动拉数据,必然就引起了同步阻塞等待数据,只有后续业务处理需要的数据完全被取到了,才能进行后续的处理。本质原因是数据是需要业务代码拉取!

流式编程或者函数编程模型是数据“推”模型,由额外的线程或者数据驱动层来给我们的业务层推数据的模型,我们的业务层不用主动拉取数据了,自然就省去了同步阻塞等待数据的过程,我们的业务层无法预知数据何时到达,只要等着数据驱动层把数据推送到业务层队列中,然后由业务层线程去调用该数据消息对应的业务处理器去处理就可以了,自然这个过程就是异步编程模型。本质原因是业务数据是由数据驱动层推送给业务层的!

总结:

数据拉模型会导致线程阻塞、线程无用等待、业务处理方式也必须为命令式,这种方式会导致系统吞吐量不理想。

数据推模型不会导致线程阻塞,业务处理方式为事件注册业务处理的方式,这种方式设计的系统会有很高的吞吐量,但是这种系统必须要配套"数据推送器"或者说"事件发生器"、"消息发生器"、reactor等。

一个例子是:IO框架netty中selector作为数据驱动层推送数据给eventloop等业务线程处理,业务线程就可以完全不用为IO阻塞了。

(完)

发布了63 篇原创文章 · 获赞 25 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/w1857518575/article/details/86691878
今日推荐