下面是我对NIO的一些想法,难免会与有理解上的偏差,因此还望各位大神能指点一二,感激不尽!
IO一般指的是内核与外部进行数据交互的所发生的事情。典型分为网络IO(socket),磁盘IO(文件),管道IO(pipe)等几类。我们将主要介绍网络IO这一部分。
一, 阻塞/非阻塞/同步/异步
谈及网络IO,都会谈到阻塞,非阻塞,同步,异步这几个概念。我们先从IO的过程讲起。
IO主要分两步:1)数据准备阶段;2)数据操作阶段(或称为IO操作阶段)。这里面涉及两个系统对象,一个是调用该IO的进程(或线程),另一个是系统内核。举例讲read()函数分两步,第一步等待数据准备好,第二步将数据从内核拷贝到用户进程。这两个步骤非常重要,因为所谓的阻塞,非阻塞,同步,异步都是针对这两个步骤来说的。
先上一张图,这张图是讲的read这个调用所可能的情况。