我理解的函数响应编程

       原创,转载请注明出处。

       函数响应编程,这个概念在网上已经有很多解释了,我也读了很多,说说我的理解。有时候我想,我如何学习一个新的概念或技术,不是应该用我已有的脑袋去理解它么,关键是怎么理解,怎么才算理解,理解的对不对,我想这是抽象变形象的过程。那我就用自己的方法去理解和认识函数响应编程这个概念。

       函数响应式编程的本质是什么?是函数编程和响应编程的结合,函数是编排,响应是关联作用。用来编排的是什么呢?是逻辑,是处理逻辑,这些逻辑是用函数实现的,而函数和函数之间的粘合剂是响应式编程实现的函数接口(when,then,merge,map,flatmap,fork,join etc.),我们最熟悉的编程方式是什么?如何定义一个函数?对输入参数进行各种运算,赋值,if-elseif-else,函数调用,抛出ex,处理ex,最后return,这是我们的函数定义。函数响应编程怎么做?定义一个函数:对函数的参数输入,进行map(func1).filter(func2).merge(func3)...(funcN),好了,编排完了,这是函数定义。

 

        函数都定义好了,但它并没有真正执行,只是定义,最终需要调用,需要执行,怎么调用执行?怎么触发?基于事件流触发,事件流中是一个个事件单元,一个事件什么时候产生,什么时候触发。那到底是哪些事件呢?具体到实际中,我们界面上的操作或者动作,也可以是系统定时产生的动作,这些动作会被转化成事件而write到stream中。而在后台,一样是事件,可以是notify事件,可以是io事件,本质上io也是notify的一种。异步的线程之间相互作用触发了函数的执行,而函数的执行结果可能再次作用于异步的线程。函数响应编程定义的处理过程可能是同步的可能是异步的,由scheduler的调度方式决定。有的执行多次,有的执行一次,是由流的性质决定的。

 

        map filter merge...这不是和mapreduce很像吗?是的,mapReduce使用了函数式编程方式,像更贴近的spark的定义执行方式。spark的RDD是函数响应编程的事件流,而spark的mapreduce定义了响应行为,输入和输出的RDD形成了DAG(有向无环图),通过对数据的位置和依赖分析形成最终的执行计划。如果说spark的batch RDD是静态(冷)数据流,那spark streaming则更像是动态(热)数据流。

 

       涉及到并发编程,那并发编程的本质是什么?现在的并发和古老的并发到底有何区别?这些各种封装好框架,除了让你编程的代码结构发生了变化,提取了常用的处理模式,分离了并发处理逻辑和你实现的业务逻辑。本质仍然是wait/notify/资源共享(表现为内存区域共享,简单的就是变量,文件,数据库,介质无非就是内存或者磁盘,这就是资源)。

 

        和传统编程相比,到底哪里不同?同步单线程确实无差别,异步调用确实有差别,使用高阶函数,让传统的回调漩涡看起来扁平化,高阶函数是什么?输入参数为函数或输出结果为函数(curry化)或两者兼备的函数。这看上去更像是两种生长方式,传统回调漩涡是从地面一直下降到地心的漩涡,而高阶函数更像是通过函数指针或接口定义重新定义函数或接口的行为,依次进行输入输出的调用。

 

最后简单总结下我们的编程方式:

1、野蛮人风格?

exec(){

dosomethingA...;

dosomethingB...;

dosomethingC...;

}

2、看上去像漩涡?像链?

function a(r1){

dosomethingA...;

b(r1);

}

function b(r1){

dosomethingB...;

c(r1);

}

function c(r1){

dosomethingC...;

}

exec(){ a("r1");}

 

3、看上去像大饼

function a(r1){

dosomethingA...;

}

function b(r1){

dosomethingB...;

}

function c(r1){

dosomethingC...;

}

exec(){ a("r1");b("r1");c("r1");}

 

4、这是函数式编程?

function a(r1){

dosomethingA...;

return r1;

}

function b(r1){

dosomethingB...;

return r1;

}

function c(r1){

dosomethingC...;

}

exec(){ c(b(a("r1")));}

 

5、这是函数响应编程?

List acts = ...;

acts.add(function(r1){dosomethingA...})

.add(function(r1){dosomeghingB...})

.add(function(r1){dosomethingC...});

exec(){for(Action act : acts) act("r1");}

亦或是:

List acts = ...;

acts.add(&a)

.add(&b)

.add(&c);

exec(){for(Action act : acts) (*act)("r1");}

或是:

List acts = ...;

acts.add(new Action(){ call(r1){dosomethingA...;}})

.add(new Action(){ call(r1){dosomethingB...;}})

.add(new Action(){ call(r1){dosomethingC...;}};

 

exec(){for(Action act : acts) act.call("r1");}

 

编程很简单,就看你怎么折腾它。

我感觉很简单,但是好像也没说明白,也许还需要理解2.0。

智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值