BIO编程和NIO中的多路复用

28 阅读1分钟

1,BIO 原生JDK网络编程

ServerSocket负责绑定IP地址,启动监听端口,Socket负责发起连接操作,连接成功后,两者通过输入和输出流进行同步阻塞式通信

image.png

image.png

编程中的Socket,Socket是应用层与TCP/IP协议组通信的中间软件抽象层,它是一组接口,其实就是一个门面模式,TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(Socket) 短链接、长连接、服务端和服务端‘客户端、通信编程关注的三件事

image.png

2,NIO 原生JDK中的网络编程 BIO面向流,一个线程只能服务一个客户端;NIO面向缓冲区,一个线程可以服务多个客户端,在所有配置参数一致时,BIO的效率比NIO高

三大核心组件和关系

Selector、Channel和Buffer

image.png

image.png

IO复用模型

image.png

select和epoll,对于一个socket,两次调用,两次返回,比阻塞IO并没有什么优势,关键是能同时对多个socket同时处理

非阻塞IO

image.png 非阻塞IO通过进程反复调用IO函数(多次系统调用,并马上返回),在数据copy过程中,进程是阻塞的

3,NIO之Buffer

重要属性:capacity、position、limit

image.png

image.png

image.png