IO相关知识
IO相关知识
## BIO
同步阻塞IO,客户端请求过程中保持连接
改进: 线程池 + BIO
AIO
异步非阻塞IO,
不用保持轮询,IO状态变化后系统通知对应线程进行处理。
NIO
同步非阻塞
注册 + 轮询
查看 Post not found: NIO学习 NIO学习
IO 多路复用
IO multi-plexing (事件驱动) - 一次监听多个描述符(读、写、网络socket)
multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流
select, poll, epoll 都是I/O多路复用的具体的实现
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。
IO多路复用的优势在于,当处理的消耗对比IO几乎可以忽略不计时,可以处理大量的并发IO,而不用消耗太多CPU/内存。 IO多路复用 + 单进(线)程有个额外的好处,就不会有并发编程的各种问题. 如果做不到“处理过程相对于IO可以忽略不计”,IO多路复用的并不一定比线程池方案更好。
例如: Web服务接入使用io多路复用,但后面的service、 jdbc数据连接是瓶颈,并没有大的性能提升。
相关 redis/nginx io模型 Post not found: redis知识点 redis知识点
https://www.zhihu.com/question/32163005/answer/55772739