Event Loop、函数式编程、IO多路复用、事件驱动、响应式、

编程思想

iOS之ReactiveCocoa简介和使用(一)html

1.编程思想

在开发中咱们也不能太依赖于某个框架,不然这个框架不更新了,致使项目后期没办法维护,好比以前Facebook提供的Three20框架,在当时也是神器,可是后来不更新了,也就没什么人用了。所以我感受学习一个框架,仍是有必要了解它的编程思想前端

1.1 面向过程:处理事情以过程为核心,一步一步的实现。react

1.2 面向对象:万物皆对象编程

1.3 链式编程思想:是将多个操做(多行代码)经过点号(.)连接在一块儿成为一句代码,使代码可读性好。a(1).b(2).c(3)后端

  • 链式编程特色:方法的返回值是block,block必须有返回值(自己对象),block参数(须要操做的值)服务器

  • 表明:masonry框架。网络

  • 练习一:模仿masonry,写一个加法计算器,练习链式编程思想。架构

1.4 响应式编程思想:不须要考虑调用顺序,只须要知道考虑结果,相似于蝴蝶效应,产生一个事件,会影响不少东西,这些事件像流同样的传播出去,而后影响结果,借用面向对象的一句话,万物皆是流。并发

  • 表明:KVO运用。框架

  • 练习二:KVO底层实现。

1.5 函数式编程思想:是把操做尽可能写成一系列嵌套的函数或者方法调用。

  • 函数式编程本质:就是往方法中传入Block,方法中嵌套Block调用,把代码聚合起来管理
  • 函数式编程特色:每一个方法必须有返回值(自己对象),把函数或者Block当作参数,block参数(须要操做的值)block返回值(操做结果)

  • 表明:ReactiveCocoa。

  • 练习三:用函数式编程实现,写一个加法计算器,而且加法计算器自带判断是否等于某个值.

2.ReactiveCocoa编程思想

ReactiveCocoa结合了几种编程风格:

函数式编程(Functional Programming)

响应式编程(Reactive Programming)

因此,你可能据说过ReactiveCocoa被描述为函数响应式编程(FRP)框架。


 

简单划分关系

除了函数式编程、其它概念有必定类似性,或者说是从不一样角度、在不一样环境下的叫法。

一、IO多路复用、事件驱动、响应式 概念相似或者同样

就是不少网络链接(多路),共(复)用少数几个(甚至是一个)线程。

链接不少的时候,不能每一个链接一个线程,会耗尽系统内存的。线程也不能阻塞在任何一个链接上,等新的数据来,这样就不能及时响应其余链接发来的数据了;也不能用非阻塞方式,轮询全部的链接,这会浪费掉大量CPU时间;只能告诉系统,我对哪些链接感兴趣,有消息来的时候,通知我处理。

二、Event Loop (好比iOS Run Loop)单线程中处理任务(通常来说,一个线程一次只能执行一个任务)(实现这种模型的关键点在于:如何管理事件/消息,如何让线程在没有处理消息时休眠以免资源占用、在有消息到来时马上被唤醒。)
 
三、函数式编程
函数式编程不须要考虑"死锁"(deadlock),由于它不修改变量,因此根本不存在"锁"线程的问题。没必要担忧一个线程的数据,被另外一个线程修改,因此能够很放心地把工做分摊到多个线程,部署"并发编程"(concurrency)。
多核CPU是未来的潮流,因此函数式编程的这个特性很是重要。
举例:
请看下面的代码:
var s1 = Op1();
var s2 = Op2();
var s3 = concat(s1, s2);
因为s1和s2互不干扰,不会修改变量,谁先执行是无所谓的,因此能够放心地增长线程,
由于s1可能会修改系统状态,而s2可能会用到这些状态,因此必须保证s2在s1以后运行,天然也就不能部署到其余线程上了。
 

函数式编程:

  语言层面的感念

  为何这两年函数式编程又火起来了呢?

  0:在C++ Java中都是语法糖等级的东西,换言之不加入同样也有高阶函数。

  1:Python, C#, Perl, JS, VB, 都是2010前加入Lambda的(Dart, Swift的确有2010后Lambda,不过他们俩就是2010后出的语言)

  2:若是说其余的,C#, Python的List Comprehension也是2010前的,Java Generic则是1998由Philip Walder(Haskell界大佬), Martin Odersky(Scala界大佬)搞出来的

  3:若是要说更远的影响力,Smalltalk都被Lisp严重影响,而后Smalltalk再影响如今一大推OO语言。

Event Loop:

  经常使用于前端开发的一种技术?

  多用于前端概念 JavaScript    Node.js(解释和执行JavaScript代码的平台,用于后端)    iOS的Run loop

   JavaScript 运行机制详解:再谈Event Loop

IO多路复用:

  一种在后端网络编程中的一种技术

  空管员管理飞机例子 见:  IO 多路复用是什么意思?

  IO多路复用机制详解    服务器,并发,“事件驱动”的本质    IO多路复用机制详解

事件驱动:

  处理事物方式上的叫法?

  Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动非阻塞式 I/O 的模型,使其轻量又高效。

响应式编程:

  一种突出技术特色式的叫法?

  Reactive Programming

  响应式编程是一种面向数据流和变化传播的编程范式

  例如,在命令式编程环境中,a:=b+c表示将表达式的结果赋给a,而以后改变b或c的值不会影响a。但在响应式编程中,a的值会随着b或c的更新而更新。

  例如,在MVC软件架构中,响应式编程容许将相关模型的变化自动反映到视图上,反之亦然。

  例如,电子表格程序就是响应式编程的一个例子。单元格能够包含字面值或相似"=B1+C1"的公式,而包含公式的单元格的值会依据其余单元格的值的变化而变化。

  iOS相关:ReactiveCocoa   RxSwift

相关文章
相关标签/搜索