不同的线程模型对性能的影响很大,我们必须要熟知各种线程模型。才能清楚的知道我们为什么要选择netty。
1.传统io阻塞模型。
2.Reactor 模型。
根据Reactor模型的数量和处理资源的线程池数量的不同,有3中典型实现。
1.单线程单Reactor。
2.单线程夺Reactor。
3.主从Reactor多线程。
Netty是在主从Reactor多线程模型中做了改进。有多个Reactor
工作原理图:
当并发数很大时,就会创建大量的线程模型。占用很大的系统资源。
任务创建连接后,如果当前线程没有数据可读,就会阻塞在read阶段,造成浪费。
基于io复用模型,多个连接使用一个阻塞对象,应用程序只需要一个阻塞对象等待,无需阻塞等待所有连接。当某个连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态撤回,开始处理业务。
Reactor模式又被成为调用者模式,分发者模式或者通知者模式。
不必为每个请求创建线程,而是采用分发处理。
IO复用结合线程池。
Reactor模式j通过一个或者多个输入同时传递给服务器的模式(基于事件)
服务器处理多个请求,并且把他们分配到相应的线程上去
Reactor模式使用io复用监听,收到事件后会把他们分发给多个线程,这是高并发性能处理所在
Reactor:Reactor负责事件的监听,分发,是在一个单独的线程中执行的。
Handlers:负责执行真正要做的事。
单Reactor单线程
单Reactor多线程
主从Reactor