《Netty权威指南》(一)走进 Java NIO

I/O 基础入门

Java1.4 之前的早期版本,存在如下问题:

  • 没有数据缓冲区,I/O性能存在问题;
  • 没有 C 或者 C++ 中的 Channel 概念,只有输入和输出流;
  • 同步阻塞式 I/O 通信(BIO),通常会导致通信线程被长时间阻塞;
  • 支持的字符集有限,硬件可移植性不好。

Linux 网络 I/O 模型

根据 UNIX 网络编程对 I/O 模型的分类,UNIX 提供了 5 种 I/O 模型:

(1)阻塞 I/O 模型

最常用的 I/O 模型就是阻塞 I/O 模型,缺省情形下,所有文件操作都是阻塞的。我们以套接字接口为例来讲解此模型:在进程空间中调用 recvfrom,其系统调用直到数据包到达且被复制到应用进程的缓冲区中或者发生错误时才返回,在此期间一直会等待,进程在从调用 recvfrom 开始到它返回的整段时间内都是被阻塞的,因此被称为阻塞 I/O 模型。

(2)非阻塞 I/O 模型

(3)I/O 复用模型

(4)信号驱动 I/O 模型

(5)异步 I/O 模型

猜你喜欢

转载自www.cnblogs.com/zengzhihua/p/9930652.html