用户空间和内核空间
Linux系统将自身划分为两部分,一部分为核心软件,即是kernel,也称作内核空间,另一部分为普通应用程序,这部分称为用户空间。
我比较喜欢的一种解释话语:计算机硬件由运算器、控制器、存储器、输入输出设备等设备组成,而能让机箱中各种设备各司其职的东西叫做系统内核。内核负责驱动硬件,管理活动和分配管理硬件资源,所以它不能直接让用户操作。
因为用户不能直接控制硬件,也不能直接操作内核,于是便需要基于“系统调用接口”开发出的程序服务来满足用户日常工作。
BIO.NIO.AIO
BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
BIO即阻塞I/O, 不管是磁盘I/O 还是网络I/O, 数据在写入OutputStream 或者从InputStream读取时都有可能会阻塞,一旦有阻塞,线程将会失去CPU的使用权,这在当前的大规模访问量和有性能要求的情况下是不能被接受的。
NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
AIO(NIO.2):异步非阻塞式IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
【推荐】/zedosu/p/6666984.html
Channel和Seletor
Seletor就可以理解为选择器
缓冲区
缓冲区(Buffer):一个用于特定基本数据类型的容器。由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类。Java NIO 中的 Buffer 主要用于与 NIO 通道进行交互,数据是从通道读入缓冲区,从缓冲区写入通道中的。
缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如果我们使用get()方法从缓冲区获取数据或者使用put()方法把数据写入缓冲区,都会引起缓冲区状态的变化。它可以保存多个相同类型的数据。
【补充】
如果觉得《无招胜有招之NIO》对你有帮助,请点赞、收藏,并留下你的观点哦!