![](https://img-blog.csdnimg.cn/2020080921553577.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Netty
Netty
程铭程铭你快成名
这个作者很懒,什么都没留下…
展开
-
NIO之旅Selector
之前的文章介绍了Buffer和Channel,今天这篇文章简单聊一下Selector。 Selector是NIO中最为重要的组件之一,我们常常说的多路复用器就是指的Selector组件。Selector组件用于轮询一个或多个NIO Channel的状态是否处于可读、可写。通过轮询的机制就可以管理多个Channel,也就是说可以管理多个网络连接。 轮询机制 首先,需要将Channel注册到Selector上,这样Selector才知道需要管理哪些Channel 接着Selector会不断轮询其上注册的Ch原创 2020-08-20 18:30:09 · 7375 阅读 · 0 评论 -
NIO之旅Buffer
在上一篇文章中聊了一下Channel,这篇文章聊一下Java NIO中的另一个重要的组件:Buffer。 Buffer的概念 首先我们先看一下Buffer的类图,Buffer在java.nio中被定义为抽象类: Buffer被称为内存缓冲区,本质上也是内存中的一块,我们可以将数据写入内存中,之后从这块内存中读取数据。也可以将这个块内存封装成NIO Buffer对象,并提供一组常用的方法,方便对这块内存进行读写操作。 在Java NIO中,所有的数据都要经过Buffer,我们可以将Buffer理解为一个数组原创 2020-08-18 22:38:45 · 7667 阅读 · 0 评论 -
NIO之旅Channel
Java NIO中有三个重要的组件Channel、Buffer、Selector,本篇文章主要讲解NIO中的Channel组件。 Channel的基本概念 Channel是Java NIO核心概念之一,翻译过来就是“通道”的意思,在使用上,通道需和缓存类(ByteBuffer)配合完成读写等操作。一个Channel对象其实就对应了一个IO连接。 在NIO中,基本所有的IO操作都是从Channel开始的,Channel通过Buffer(缓冲区)进行读写操作。 channel.read()表示读取通道中数据到原创 2020-08-14 17:56:26 · 7694 阅读 · 0 评论 -
Java中的BIO通信模型
在上一篇Linux和Java中的I/O模型中介绍了NIO、BIO模型,本篇文章讲解一下多线程+BIO的通信模型。主流的web服务器Tomcat就是多线程+BIO的通信模型的代表者。 原理图 Server端 Server端即接收消息的那一端。BIO是一种阻塞IO,也就是说,当前线程会一直阻塞,直到接受到消息。所以通常会使用多个线程来配合,即每来一个IO连接,都新启一个线程去处理。 但由于在Java中,线程是一种比较宝贵的资源,所以一般会使用线程池来复用线程资源。 public class Server {原创 2020-08-10 10:39:15 · 7746 阅读 · 0 评论 -
Linux和Java中的I/O模型
在了解Java中的I/O模型之前,我们来了解一下Linux中的I/O模型。 用户空间和内核空间 Linux为了保证系统安全,把内存分为了两种空间,分别是用户空间和内核空间。只有内核空间可以直接调用硬件(比如磁盘,网卡等)。 而我们一般的进程是在用户空间的,位于用户空间的进程是不能直接调用硬件的,而是通过系统调用来请求内核空间协助完成IO操作。 那内核空间是怎么协助的呢?内核空间会为每个IO设备维护一个缓冲区buffer(比如文件系统IO,就是页缓存page cache)。内核收到来自用户空间的进程的系统调用原创 2020-08-09 21:46:59 · 8119 阅读 · 0 评论