1、是否简略形容下 reactor 线程模型?
三个点,事件驱动、一个或者多个数据源、多路复用
事件驱动简略了解 :
场景 1 : 比如说小 A HR 要招聘一个 NB 的程序员,既要 Java 根底厉害,又波及大数据畛域 (不单单只会皮毛的) 的人,忽然小 A 在 xxx
招聘网站看到了一个小 B,发现小 B 就是我想要找的人哈,怎么办?打个电话吧?嘟嘟嘟 …,接通了,聊了聊,挺好,过去下班吧
场景 2 : 还有一种状况就是,小 A 和小 B 聊了聊,小 A 说,你先关注订阅一下咱们公司,咱们有新音讯了告诉你,因为我本人做不了主,须要主管看看,
一个工夫,主管看了看,桌子一拍,唉吆喂,这不就是我想要找的人么,回调发一个邮件,来下班吧,小 A 收到邮件,高高兴兴来下班了
同步了解音讯驱动 :
HR 小 A 在各种招聘网站都看,要么 Java 根底不行的,要么大数据不会的,肿么办?要不在 xxx 上公布一个招聘音讯吧,一旦有这样能力的人看到,说不定会分割我
总结 :
简略了解 : 事件驱动就是我是被动的,比如说 RPC,我被动来调用你,你有事件告诉我 ; 音讯驱动,我把音讯处理完毕了,放到这里了,你想生产就生产哈
一个或者多个数据源 : NIO 多路复用能够反对百万 client 连贯,承受客户端的 Accept、Read、Write 事件
多路复用 : client channel 的注册到一个 selector,轮询 channel 事件,事件处理
2、Kafka 的 reactor 线程模型能说说么?最好画个图吧?
简略说说,Acceptor 线程疯狂的承受客户端的连贯,come on,来和我建设连贯吧,Acceptor 领有 Processor 线程的援用,过去了,是吧。
好,打入到 Processor 线程中,一直的轮询打。一旦客户端有新的事件,我要读,好,Processor 线程感知到了,而后又摔到一个线程平安的队列中,Handler 线程池中,感知到了,会从队列中获取,比如说真正的 IO 操作(磁盘读 / 写操作,可能很浪费时间,没事,搞到线程池中,你干你的,不要阻塞我上游的线程),一旦 Handler 线程操作实现,因为 Handler 线程领有 Processor 中的响应队列援用,间接写回去,Processor 线程在轮询的时候,吆,Handler 处理完毕了,好吧,我写给客户端,好的,客户端实现了一次读取操作
欢送点赞加关注,用最简略的话,聊艰涩难懂的技术