Netty的简单介绍
Netty 是一个 NIO client-server(客户端服务器)框架,使用 Netty 可以快速开发网络应用,例如服务器和客户 端协议。 Netty 提供了一种新的方式来使开发网络应用程序,这种新的方式使得它很容易使用和有很强的扩展性。 Netty 的内部实现时很复杂的,但是 Netty 提供了简单易用的 api 从网络处理代码中解耦业务逻辑。 Netty 是完全基 于 NIO 实现的,所以整个 Netty 都是异步的。
简单点说就是Netty提供了一个简单,间接的方法来操作网络之间的通讯。
不选择JAVA原生NIO和IO的原因
基于IO的经典同步堵塞模型:
经典的IO模型也就是传统的服务器端同步阻塞I/O处理(也就是BIO,Blocking I/O)的经典编程模型,当我们每得到一个新的连接时,就会开启一个线程来处理这个连接的任务。之所以使用多线程,主要原因在于socket.accept()、socket.read()、socket.write()三个主要函数都是同步阻塞的,当一个连接在处理I/O的时候,系统是阻塞的,如果是单线程的话必然就挂死在那里;但CPU是被释放出来的,开启多线程,就可以让CPU去处理更多的事情。
因此这个模型最本质的问题在于,严重依赖于线程。但线程是很”贵”的资源,主要表现在:
线程的创建和销毁成本很高,在Linux这样的操作系统中,线程本质上就是一个进程。创建和销毁都是重量级的系统函数。
线程本身占用较大内存,像Java的线程栈,一般至少分配512K~1M的空间ÿ