BIO,NIO对比
2022-04-13 16:05:15 51 举报
BIO和NIO是Java中的两种I/O模型。BIO(Blocking I/O)是一种同步阻塞的I/O模型,即在进行读写数据时,线程会一直阻塞等待,直到数据读取完成或者写入完成。而NIO(Non-blocking I/O)是一种同步非阻塞的I/O模型,即在进行读写数据时,线程不会一直阻塞等待,而是通过轮询的方式不断查询数据是否读取完成或者写入完成。相比于BIO,NIO更加高效、灵活,能够更好地支持并发处理大量连接请求。但是,NIO需要使用Selector来管理多个Channel,代码实现相对复杂。因此,在实际应用中需要根据具体情况选择合适的I/O模型。
作者其他创作
大纲/内容
Thread
通道
输入\\输出流
Java NIO
在线Socket集合socket01socket02socket03socket04
Socket
客户端
同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。
Server服务端
Server
selector选择器
Socket01
Buffer
Socket03
同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求就进行处理
Socket04
采用线程池和任务队列实现,当客户端接入时,将客户端的Socket封装成一个Task(该任务实现java.lang.Runnable线程任务接口)交给后端的线程池中进行处理。JDK的线程池维护一个消息队列和N个活跃的线程,对消息队列中Socket任务进行处理,由于线程池可以设置消息队列的大小和最大线程数,因此,它的资源占用是可控的,无论多少个客户端并发访问,都不会导致资源的耗尽和宕机。
Socket02
Java BIO
Runnable任务队列
Thread Pool
0 条评论
下一页