[Day1] Reactive Programming 简介与前言

Reactive Programming

两年前在JCConf 2019,欣赏了Josh Long精彩又活泼的演讲,主题就是Reactive Spring,成功勾起我对Reactive的兴趣,当年曾经有尝试去了解,发现相关的知识很广泛,算是有点撞得头破血流,所以两年後多累积了一些程序经验,趁着铁人赛的机会,打算来完整从最零碎的知识开始学习,因为不常写文章而且功力薄弱,这个系列前半部分是专有名词研究,主要目的是更好的了解Reactive的意思而不是要学术性的探究,如果有错误麻烦多多见谅,有需要讨论的地方,欢迎在留言区讨论。

在考虑是否参赛的过程中,infoQ的这张图算是最後一根稻草,我发现Reactive Programming都已经到了Late Majority我居然还不会,而且学会了还可以牵扯到一点Innovators里面RSocket & Reactive Streams增加一点潮度,就决定来写了。
https://ithelp.ithome.com.tw/upload/images/20210916/20141418saXjrTN1dI.jpg

目标对象

虽然说是从零碎的知识,但多少还是要先有一点基础,所以建议是至少拥有以下技术背景再来阅读会好一点。

  1. Java8:对Stream、Lazy loading、Optional、Lambda、Function 有基本的认识。
  2. Spring:Spring MVC 等相关功能有所了解。
  3. OOP:对物件导向程序设计有经验。
  4. 程序经验:有维运过别人写的程序效果更佳。

目录

整个系列的大方向

  1. 名词解释
  2. Java9
  3. Reactor
  4. Spring WebFlux
  5. R2DBC
  6. RSocket

简介

Reactive Programming 是一种程序的「典范」(Programming paradigm),最主要是透过减少thread的等待时间(non-blocking非阻断)来达到充分利用thread的目的,毕竟资源是可贵的,就像是进入到一间餐厅门口,却没有人来招待你,你可能就会直接走掉了,但如果有人跟你说声稍等一下喔,服务人员处理完手边的事情就会来找你,这样给人的感觉好多了,同样的道理,server将事情处理完再通知你来拿,让thread不用白白的等待。

Reactive Programming 跟微服务(microservices )一样都是以前就存在的,只是随着技术、环境的演进後才开始兴盛。他的概念与event driven、observer pattern都有重叠的部分,在研究的过程中会让你觉得他是个熟悉的老朋友,他代表着不断变化的资料流,某种程度上与Excel中互相依赖的公式很像,会随资料变动而改变。擅长处理高效能(high-performance)、并发(concurrency)与非同步(asynchronous),在原本写程序的习惯上,如果使用了concurrencyasynchronous并伴随各式各样的锁(synchronized),如果不谨慎常常导致不容易去除错与维运,或是一个需求需要透过一个又一个API才有办法完成,也就是需要等待每个服务都完成,这常常会导致效能不彰(大量IO),以上情况在Reactive Programming都会有比较好的效果。

理解Reactive Programming的初期会被各式各样的专有名词轰炸,不要用旧的观念去思考Reactive Programming,需要有DB的支援、application server、语言本身或是额外的library才能做到,头昏脑胀是必经的过程,先初步熟悉概念再实作一个DEMO可以更好的去理解。

谁在使用

reactivex.io网站上可以看到Netflix、Microsoft...等大公司都有使用。
reactivex.io

结语

Reactive概念对我来说一开始是充满许多未知的,但随着不断阅读文章与影片,才渐渐的把拼图一片片补上去,最後才有一个轮廓出来,所以如果看完简介还是不了解是很正常的,欢迎下一篇文章再回来,下一篇将会介绍Programming paradigm

大部分有出现的code
rsocket demo code
个人部落格之後可能会整理进去
如果觉得写得不错帮忙按个星星或是追踪,感谢!
资料来源


<<:  Day 01 - 从头开始

>>:  for 回圈基本要点

【从零开始的Swift开发心路历程-Day3】建立第一个project!

昨天大概熟悉了一下Swift的语法後,我们今天就来正式开工啦! 首先我们打开Xcode,选择Crea...

前进切版之路! CSS微体验 (第一天)

从一般大学文学院毕业之後,茫茫在职场漂泊了几年。虽然工作稳定但总缺乏了热情与新意,随着年龄增长越来越...

离开是为了面对更好的自己

嗨各位大大好,我是 Robin~ 今天要来挑战一个我以前不敢写的主题, 就是职涯方面的文章。 今天会...

#12 Web Crawler 5

今天应该是爬虫的最後一篇了。我们要把爬下来的资料做成「每日铁人赛热门 Top 10」。 来看看爬下来...

Golang 转生到web世界 - gin Middleware中间件

Golang Golang gin Middleware中间件 我第一次接触Middleware这个...