初识netty

NIO基础

NIO:非阻塞IO

BIO:阻塞IO

1.三大组件

Channel

类似与stream流,是读取数据的双向通道,可以从channel将数据读入buffer,也可以将buffer的数据写入channel,之前的stream要么是输入,要么是输出,从某种方面来说,channnel比buffer更彻底

常见的channel

  • FileChannel 用于文件传输

  • DatagramChannel 用于UDP网络编程

  • SocketChannel TCP,客户端服务端都能用

  • ServerSocketChannel 专注于服务端

Buffer

Buffer 用于缓冲读写数据

一般我们的数据如果需要从IO读取到堆内存,中间需要经过Socket缓冲区,也就是说一个数据会被拷贝两次才能到达他的的终点,如果数据量大,就会造成不必要的资源浪费。 Netty针对这种情况,在堆内存之外开辟一块内存,也就是缓冲区,数据就直接从IO读到了那块内存中去,在netty里面通过ByteBuf可以直接对这些数据进行直接操作,从而加快了传输速度。

常用buffer

ByteBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer,CharBUffer

Selector

当一个连接建立之后,他有两个步骤要做,第一步是接收完客户端发过来的全部数据,第二步是服务端处理完请求业务之后返回response给客户端。NIO和BIO的区别主要是在第一步。 在BIO中,等待客户端发数据这个过程是阻塞的,这样就造成了一个线程只能处理一个请求的情况,而机器能支持的最大线程数是有限的。 而NIO中,当一个Socket建立好之后,Thread并不会阻塞去接受这个Socket,而是将这个请求交给Selector,Selector会不断的去遍历所有的Socket,一旦有一个Socket建立完成,他会通知Thread,然后Thread处理完数据再返回给客户端——这个过程是不阻塞的,这样就能让一个Thread处理更多的请求了。所以NIO的并发相对较高,比较适用于连接数高,流量低的情况

初识netty

BIO

初识netty

NIO

三大核心原理示意图

 初识netty

初识netty

上一篇:nuxtjs使用静态生成时出现Error: connect ECONNREFUSED 127.0.0.1:3000的问题解析


下一篇:js对金额格式化————脑子不好使总忘