OS指令角度—IO 演化示意图
2021-05-12 22:03:02 7 举报
IO 演化
作者其他创作
大纲/内容
OS系统调用指令
BIO
JAVA代码程序
①ServerSocket serverSocket = new ServerSocket(); // 创建ServerSocket对象 ② serverSocket.bind(SocketAddress endpoint) // 绑定地址与端口③ Socket socket = serverSocket.accept(); // 服务端接收连接(阻塞方法)④ new Runnable(){ socket.getInputStream(); ...}// 另起一个线程 用于执行 IO 逻辑 // 该 IO 读写操作均是阻塞的
NIO
BIO 的缺点1. 阻塞:Socket 接收阻塞,IO操作阻塞,2. 一线程一连接:高并发下,损耗大量线程资源,极可能导致线程资源耗尽,影响机器性能,乃至宕机。 虽然可以使用线程池,实现伪异步IO,但是当线程池被打满,会导致后续IO操作响应失败。
NIO 的缺点1. SocketChannel 每次循环均需传递过来:在OS层次上就是 fds(文件描述符) 多次从 内核态 传递到 用户态。2. 若所有连接中仅有少数连接有数据传输(即事件为OP_READ),那么大量遍历则是无效遍历,这部分操作也需要系统调用的参与,从而影响程序效率。
NIO(Selector)的缺点1. 还是属于同步IO模型(AIO 异步IO模型)2. 单 Selector 处理 channel 和 IO 逻辑,性能瓶颈(多Selector,分工)
NIO(Selector)
Linux 操作系统一切皆文件
0 条评论
下一页