zoukankan      html  css  js  c++  java
  • Event Loop、函数式编程、IO多路复用、事件驱动、响应式、

    编程思想

    iOS之ReactiveCocoa简介和使用(一)

    1.编程思想

    在开发中我们也不能太依赖于某个框架,否则这个框架不更新了,导致项目后期没办法维护,比如之前Facebook提供的Three20框架,在当时也是神器,但是后来不更新了,也就没什么人用了。因此我感觉学习一个框架,还是有必要了解它的编程思想

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

    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)框架。


    简单划分关系

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

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

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

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

    2、Event Loop (比如iOS Run Loop)单线程中处理任务(一般来讲,一个线程一次只能执行一个任务)(实现这种模型的关键点在于:如何管理事件/消息,如何让线程在没有处理消息时休眠以避免资源占用、在有消息到来时立刻被唤醒。)
     
    3、函数式编程
    函数式编程不需要考虑"死锁"(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

      

  • 相关阅读:
    mysql 查看数据库及表大小以及数据库扩容评估
    idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
    mybatis plus 中增删改查及Wrapper的使用
    mybatis plus 主键策略
    搭建 spring boot + mybatis plus 项目框架并进行调试
    jeecg datagrid重新指定数据源
    java 日志脱敏框架 sensitive-新版本0.0.2-深度拷贝,属性为对象和集合的
    java 实现敏感词(sensitive word)工具详解使用说明
    java 日志脱敏框架 sensitive,优雅的打印脱敏日志
    互联网公司OpenAPI链接
  • 原文地址:https://www.cnblogs.com/liyonghua/p/8269946.html
Copyright © 2011-2022 走看看