美文网首页
netty学习笔记(1):NIO和Netty

netty学习笔记(1):NIO和Netty

作者: jiaminzhang | 来源:发表于2019-12-07 10:48 被阅读0次

什么是NIO

NIO(Non Block IO)一般对应的是BIO,非阻塞IO相对阻塞IO的区别在于获取IO状态的过程是非阻塞的,好处是可以用更少的线程管理更多的链接。比如目前有10000个链接,而同时活跃的只有200个,如果用BIO的话必须得10000个线程才能管理,而NIO只需200个线程即可。而在java中,线程是相对宝贵的资源,每个线程栈大小默认为1MB,而且多线程之间的切换也会影响性能,因此NIO会明显提高后台能够处理的链接数。

原生NIO编程

原生的NIO编程主要有几个概念:

  • Channel:通道,泛指可以进行数据传输的通道,比如一个Socket,Channel默认是双向的。
  • Buffer:和channel进行数据交换的数据缓冲区,可以把数据从buffer写进channel或从channel读入buffer
  • Selector: NIO实现的关键,可以用一个selector管理多个channel,对于网络来说,相当于可以用一个线程来管理多个链接。channel可以向selector注册并指定感兴趣的事件,当事件发生时可以进行相应的处理

NIO编程中一般有两种channel。ServerSocketChannel代表服务端的channel,它可以绑定端口,监听链接连接的请求。SocketChannel代表客户端向服务端发起的链接,可以认为是一个实际的TCP链接,它可以监听数据的读取,写入等事件。下面是一个服务端编程的例子。

Netty

Netty出现的目的是为了提高nio编程的效率和性能,提供了更好的方法和工具来方便网络编程的开发。具体的netty介绍就不复述了,可以去看netty官网。后面的学习主要基于netty的4.1.33.Final版本进行。

<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.33.Final</version>
</dependency>

相关文章

网友评论

      本文标题:netty学习笔记(1):NIO和Netty

      本文链接:https://www.haomeiwen.com/subject/dohmmqtx.html