写在前面
本文来看下什么是reactor以及其三种版本。
1:什么是reactor以及其三种版本
为了更好的理解什么是reactor,我们结合现实生活中的例子来看下。
翠花是个貌美如花的姑娘,人称赛东施,她的梦想是嫁给王子,可是天不随人愿,最终她嫁给了王大勺,看名字可能你已经猜出来了,王大勺他是一个厨子。王大勺有一个小饭馆,规模不大,翠花不干活,就是指挥王大勺干活,因为人少,所以,以下的工作都是王大勺的:
迎宾,做菜,上菜,收拾碗筷桌子等
因为翠花指挥得当,王大勺的生意蒸蒸日上,如是乎,换了更大的门脸,但是渐渐的随着客人的增多,王大勺一个人已经显得力不从心了,忙不过来了,很累很累了,但是,翠花的做法不是自己下手,而是又招了几个人来做和王大勺一样的活,还是:
迎宾,做菜,上菜,收拾碗筷桌子等
终于,我们的王大勺可以喘口气了,但是,生意越来越好,新的问题出现了,什么问题呢?所有人都在忙着做菜,导致客人来了也没有人去迎宾,白白流失了客源,这个时候我们聪明的翠花同学也发现这个问题了,她的做法是什么呢?翠花又重新招了几个俊男靓女专门负责接待的工作,因为接待的工作太重要了,你做饭慢一点点其实关系不大的,但是如果因为没有迎宾导致客源流失就损失太大了,所以不得不说,咱们这位有着王子妃梦想的翠花还是蛮有商业头脑的呢!
如果对应到我们例子里的话,线程对应的就是王大勺们
,reactor就可以对应到翠花了。所以,reactor是什么呢?可以看作是线程工作的指挥官,规定了哪些线程应该做哪些工作,所以,reactor其实就是一种定义线程如何工作的工作模式了。
结合例子,再来看下rector的三种版本,首先王大勺一个人干活,就可以对应到reactor的第一个版本,所有的事情都是一个线程来干,如下图:
也就是单线程版本,同样这个线程也会很累的。
其次,翠花招了很多人一起干活,就对应了reactor的第二个版本:
也就是多线程版本,但不同于例子,大家都干所有的活,reactor的多线程版本只是定义了使用线程池来执行解码,业务处理,编码
的工作,这个要注意。
最后,翠花招了几个俊男靓女专门负责接待的工作,就对应了rector的第三个版本:
在多线程版本上进一步升级,一个线程专门负责接收连接,接受连接的工作类似于迎宾,也是最重要的,毕竟如果因为线程忙于其他事情而导致客户端连接超时的话,则程序可能就会出现比较大的问题,相反的,收发消息稍微慢一点点其实是关系不大的。
工作中如果需要的话,无脑选择第三种版本即可,因为他能保证最重要的事情一定会去做,其他的事情也会去做,只不过可能晚一点点而已(也不一定哈)
。