Netty学习笔记—IO模型
来源:互联网 发布:java api 数量 编辑:程序博客网 时间:2024/06/05 04:56
netty是一个流行的NIO的框架,它的健壮性、性能、功能都特别的好。既然是一个NIO的框架,那么今天就来聊一聊IO模型。
BIO模型
在网络编程中,基本的模型也就是常见的Client/Server模型,这也就是常见的两个进程之间的相互通信。也非常的简单,服务端暴漏自己的ip和端口,客户端通过地址信息向服务端发起连接请求,经过三次请求的握手进行建立连接,如果连接成功,双方就可以开始进行通信。
上面就是传统的BIO的模型,但是我们发现这是一个一对一的应答通信模型。什么意思呢,也就是服务端有一个独立的Acceptor线程负责监听客户端的连接请求,它接收到客户端的连接请求后,就会为每一个客户端创建一个新的线程进行链路处理,处理完后,把结果返回给客户端,然后进行线程的销毁。
BIO模型的问题,通过上面的描述,我们很容易发现潜在的问题,也就是当并发量大的话,服务端因为要创建过多的线程,从而导致系统的性能急剧下降,甚至可能造成线程堆栈溢出,创建新线程失败等问题,结果可想而知,进程宕机或者不能对外提供服务。
伪异步IO
上面分析了BIO的问题,那么如何来解决呢,可以在服务端通过线程池来替代过多的线程带来的开销。让客户端的每一次的请求都是一个task,交给服务端的线程来进行操作。
伪异步模型的问题:虽然解决了大量线程的问题,但只是做了一个简单的优化,无法从根本上解决同步IO导致的通信线程阻塞的问题。比如服务端采用了线程池,当并发量大的时候,依然是拒绝响应等
NIO模型
NIO被称作New IO,支持阻塞和非阻塞两种模型,与传统的面向字节的io流相比较,它提供了高速的、面向块的I/O操作。也就是数据通过块的形式写到buffer中,然后再从buffer中流入到channel。另外还有一个多路复用器Selector的概念,多路复用器提供选择已经就绪的任务的能力,它会不断的轮询注册在其上的channel,如果某个channel上面发生读或者写事件,这个channel就处于就绪状态,会被selector轮询出来。
- Netty学习笔记—IO模型
- Netty IO线程模型学习总结
- netty学习(一)IO模型
- IO模型学习笔记
- netty学习笔记(一)—结合reactor模式探索netty对网络io的处理机制
- netty学习笔记(一)—结合reactor模式探索netty对网络io的处理机制
- Netty 4.x学习笔记 - 线程模型
- netty学习(一)--linux下的网络io模型简介
- Netty学习笔记—helloWorld
- netty学习笔记(4)_线程模型解析
- 【Netty】netty学习笔记一
- IO通信模型和Netty 上篇
- IO通信模型和Netty 下篇
- netty系列2-Linux网络IO模型
- Netty学习三:线程模型
- Netty学习三:线程模型
- Netty源码学习笔记
- Netty学习笔记一
- JAX-WS + Spring integration example
- 收录一些JS方面问题解决
- 线性结构---堆栈
- Html5新增标签
- 【IOS学习】iOS本地数据存取,看这里就够了
- Netty学习笔记—IO模型
- 【Android】如何加速 AndroidStudio 的编译效率
- AndroidStudio2.1.2版本使用jdk1.7完美创建工程(不用jdk1.8)
- Java在linux系统的部署(3): 系统环境的安装——安装VirtualBox安装增强功能
- 用Oracle脚本大量生成java、jsp、mybits代码
- svn项目分支与合并管理
- 学习の八月
- Unity的【CaronteFX】插件制作简单的掉落物理效果(1)
- push_back讲解