Skip to content

jicahoo/learn-reactive

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 

Repository files navigation

learn-reactive

RxJava

  • 响应式编程来自于前端开发。前端要时刻保持页面的响应性,而不能阻塞。RxJava用于Android开发,Node.js也源于前端语言JavaScript

Netty

  • 异步的事件驱动的网络应用框架
  • Netty的核心的编程模型,不仅可以用于网络通信框架,也可以用于应用程序的构建,例如Vert.x就是基于Netty Core的。
  • EventLoop Group包含几个EveentLoop。是个类似ExecutorService的事物。你可以向EventLoopGroup提交(event,Handler), Round-Robin分发给worker: EventLoop。每个EventLoop对应一个线程。无论是网络的select操作还是业务逻辑都是在这个EventLoop上执行的。select操作是可以阻塞的和非阻塞的,如果EventLoop只干和网络IO相关的事情,应该可以阻塞调用;如果EventLoop还要干一些其他计算逻辑,需要非阻塞调用select, 没IO的时候,就可以很快地去处理其他任务。
  • 业务逻辑怎么组织是通过PipeLine的一个链式结构。PileLine的每一节执行完成之后,会把后一节的逻辑提交到当前EventLoop的任务队列里,直到一环扣一环地完成整个Pipeline。这个设计和Akka的消息调度模式类似,当服务完某个Actor(信箱)之后,会继续把这个Actor在放入任务队列。一个Pipleine只能在同一个Eventloop上运行,不然的话,会有并发问题。Eventloop不可阻塞,阻塞操作需要专门的线程池,EventLoop线程的个数一般是n*Number(core).

Coroutine:

Tips

Reactive streams

Monad

高阶函数

  • 什么是高阶函数?函数式编程中,函数是一等公民,函数可以作为参数,也可以作为返回值。函数式编程,最重要的一个思想,就是大的函数由小的函数组合而来,以达到重用的目标,所以,而高阶函数,就是组合函数的一个手段,入参里有函数,返回是组合了入参函数的新函数。

函数的组合

  • https://www.sumologic.com/blog/code/3-tips-for-writing-performant-scala/ .map().filter()... 这些函数目标并不是每调用一个函数就产生一个中间结果,如果是那样的话,肯定耗内存。他要做的是 f(g(x)) 变为 fg (x), 要的是fg, 能够把函数组合起来,到最好需要计算的时候,直接调用这个被组合的函数。所谓,函数编程。

map和foldLeft

Nil是个好东西

  • Nil是List中的零元。Nil:::list == list:::Nil
  • 有人说,罗马数没有零,所以,罗马人的数学没有阿拉伯人的好。因为零的引入,让某些计算简单很多。Nil的地位就像0,让你的程序更加流畅
  • Example: http://exercism.io/submissions/7ed7e1daec4a419fba6b6ac9c2425cdc (scala-grade-school)
  • Nulla 意大利语 代表0

referential transparency

Related Topics:

Java CompletableFuture, Promise is Monad

Function Prgrammming

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published