美文网首页
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