单线程模型
介绍
用户发起IO请求到Reactor线程,它将用户的IO放到通道中,然后进行后续的处理,处理完成之后,Reactor线程重新获得控制权,继续其他客户端的处理
注意点:
- 每个用户事件都在同一个线程中执行
- 性能有限,不能处理成百上千的事件
- 当负荷达到一定程度的时候,性能会下降
- 某一个事件发生故障时,不能继续处理其他的事件
- 这种模型一个时间点只有一个任务在执行,这个任务执行完了,再去执行下一个任务
模型图
多线程模型
介绍
多线程模型是由一组NIO线程来处理IO操作(之前是单个线程),所以在请求处理上会比上一种模型效率更高,可以处理更多的客户端请求。由Reactor线程来建立连接,具体的业务由线程池对每一个通道建立一个线程去执行。
注意点:
- 这种模型使用多个线程处理任务,任务可以同时进行
- 如果并发很大的话,无法处理
模型图
主从多线程模型
介绍
Netty推荐使用的线程模型,这用于高并发请求,一组线程池接收请求,一组线程池处理IO
模型图
总结:举个例子---------足疗店
单线程模型:足疗店很小,只有一个人。他即是接待员,也是技师。当客户来了以后,他先接待,然后按摩。处理完一个客户之后,再处理第二个客户。
多线程模型:这个足疗店经过老板的努力,做大了,然后他招了很多技师。当客户来了以后,他先接待,然后交个技师团队,每个客户分配一个技师。
主从多线程模型:这家店的生意越来越好,老板发现自己一个人接待不过来了,于是他就招了一堆接待员。当客户来了以后,接待员团队分配一个接待员,然后就交个技术团队,由技师团队分配技师。
当然,我们面试的时候可不能举这种例子啊,可以举海底捞的例子,海底捞也是现有接待人员,然后有服务人员的。