Netty IO模型
2022-02-01 18:37:35 0 举报
详细从整体描述Java IO模型和netty线程模型
作者其他创作
大纲/内容
NIO多路复用
1)服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器Selector上,多路复用器轮询到连接有 I/O 请求就进行处理 2)并且使用ByteBuff缓冲数据,支持mmap和sendFile数据零拷贝来提升性能
同步阻塞
NIO线程模型(Reactor模型)
华丽的分割线
1)性能问题,只有一个线程,无法完全发挥多核 CPU 的性能,很容易阻塞,容易单点故障2)使用场景:客户端的数量有限,业务处理非常快速,比如 Redis 在业务处理的时间复杂度 O(1) 的情况
NIO高性能线程模型
主从Reactor多线程
IO模型
传统BIO
AIO(不够成熟)
1)如socket编程中服务端的 accept() 和 read() 在没有连接和数据读取的时候会一直阻塞,线程不能得到释放,浪费资源;2)每增加一个客户端,服务端就需要增加一个线程来专门为其服务
Netty线程模型
netty基于此线程模型做了改进
同步非阻塞
1)线程1调用方法后理解返回,不会被阻塞也不需要立即获取结果; 2)当方法的运行结果出来以后,操作系统通知并调用回调函数由线程2将结果返回给线程1
单Reactor单线程
1)可以充分的利用多核 cpu 的处理能力 2)Reactor 承担所有的事件的监听和响应,它是单线程运行,在高并发场景容易出现性能瓶颈。也就是说Reactor主线程承担了过多的事
单Reactor多线程
1)用户线程在一个循环中一直调用read方法,若内核空间中还没有数据可读,立即返回,即方法不会阻塞,但需要线程不停的循环请求
异步非阻塞
1)职责明确,父线程只需要接收新连接,子线程完成后续的业务处理 2)数据交互简单,Reactor 主线程只需要把新连接传给子线程,子线程无需返回数据。3)编程复杂度较高 4)广泛应用,Nginx 主从 Reactor 多进程模型,Memcached 主从多线程,Netty 主从多线程模型的支持
收藏
收藏
0 条评论
回复 删除
下一页