BIO
JDK 网络编程 BIO,意为阻塞的 IO。
BIO 的阻塞体现在两个方面:
- 若一个服务端的服务绑定端口启动后,主线程就会一直等待客户端的连接。
- 客户端和服务端 Socket 端口建立连接之后,在读取到 Socket 信息之前,线程一直处于等待,一直处于阻塞状态。
典型的 请求 -应答模型
由一个独立的 Acceptor
模型监听客户端的请求,收到请求后为每一个客户端创建一个线程去处理,处理完成后将结果返回给客户端。
Java BIO:传统的网络通讯模型,就是BIO,同步阻塞IO。
其实就是服务端创建一个ServerSocket, 然后就是客户端用一个 Socket 去连接服务端的那个ServerSocket, ServerSocket接收到了一个的连接请求就创建一个Socket和一个线程去跟那个Socket进行通讯。
接着客户端和服务端就进行阻塞式的通信,客户端发送一个请求,服务端Socket进行处理后返回响应,在响应返回前,客户端那边就阻塞等待,什么事情也做不了。
这种方式的缺点, 每次一个客户端接入,都需要在服务端创建一个线程来服务这个客户端,这样大量客户端来的时候,就会造成服务端的线程数量可能达到了几千甚至几万,这样就可能会造成服务端过载过高,最后崩溃死掉。
伪异步IO模型
用线程池管理服务端的线程,实现异步处理Socket请求。
但是底层还是使用同步阻塞IO,所以叫伪异步。