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

相關文章
相關標籤/搜索