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

https://www.zhihu.com/question/28594409/answer/74003996

https://www.zhihu.com/question/306267779/answer/570147888