HengYk Blog

个人站

具有浪漫主义情调的理想主义务实青年


Java BIO

第一章 BIO

1. BIO概述

       BIO 全称Block-IO是一种阻塞同步的通信模式。何为阻塞同步?以数据读取过程为例,阻塞指的是等待数据准备的过程,而同步指的是数据从内核拷贝至进程的阶段。BIO的特点为模式简单,使用方便,但并发处理能力低,通信耗时,依赖网速

2. BIO的设计原理

       服务器通过一个Acceptor线程负责监听客户端请求和为每个客户端创建一个新的线程进行链路处理。典型的一请求一应答模式。若客户端数量增多,频繁地创建和销毁线程会给服务器打开很大的压力。后改良为用线程池的方式代替新增线程,被称为伪异步IO。 服务器提供IP地址和监听的端口,客户端通过TCP的三次握手与服务器连接,连接成功后,双方才能通过套接字(Socket)通信。

3. 常见的IO流

4. 代码解析

服务端:第一步,设置端口监听;第二步,等待监听结果(阻塞);第三步,创建并处理线程任务。

客户端:第一步,向服务器发起连接;第二步,向服务器发送请求并接收来自服务器的处理结果。

改良后的服务端:第一步,设置端口监听;第二步,创建线程池;第三步,等待监听结果(阻塞);第四步,创建线程任务并加入线程到线程池中;第五步,处理线程池中的线程任务。

5. BIO【JDK 1.0】小结

       BIO模型中通过Socket和ServerSocket完成套接字通道的实现。阻塞,同步,建立连接耗时。实现BIO程序开发:同步阻塞IO操作,每一个线程都只会管理一个客户端的链接,这种操作的本质是存在有程序阻塞的问题。此问题可以通过引入伪异步IO的方式进行一定程度的改善。程序问题:性能不高、多线程的利用率不高、如果大规模的用户访问,有可能会造成服务器端资源耗尽。

完整代码参见https://github.com/HengYk/BNADemo