一、常见IO模型:
(1)同步阻塞IO:服务端阻塞等待客户端发送请求
(2)同步非阻塞IO:服务端采用轮询的方式处理客户端请求
(3)多路复用IO:Reator设计模式(Java中的selector和epoll)
(4)异步IO:Proactor设计模式

二、同步和异步的区别(用户线程和CPU交互方式):
(1)同步(调用者主动等待调用结果):用户发起IO请求后要等待或轮询CPU的IO操作完成才能继续执行
 常见IO模型常见IO模型常见IO模型常见IO模型常见IO模型
(2)异步(被调用者主动通知调用者):用户发起IO请求后不需要等待,继续干自己的事情,CPU的IO操作完成后告诉用户已经完成(或者调用用户的回调函数)
常见IO模型
常见IO模型
常见IO模型
常见IO模型
 三、阻塞和非阻塞(用户线程等待IO调用结果时的状态,和同不同步不是一回事):
(1)阻塞:在用户调用IO的结果返回之前,用户线程会被挂起,在得到结果后才会返回
(2)非阻塞:先用户调用IO等结果的过程中,不会挂起阻塞线程,而是轮询的方式等待结果

四、4中IO的详细介绍
(1)同步阻塞IO:
常见IO模型
 常见IO模型常见IO模型常见IO模型
(2)同步非阻塞IO:
 常见IO模型常见IO模型常见IO模型常见IO模型
(3)多路复用IO:
常见IO模型
常见IO模型
常见IO模型
常见IO模型
用户首先将需要进行IO操作的socket添加到select中,然后阻塞等待select系统调用返回。当数据到达时,socket被**,select函数返回。用户线程正式发起read请求,读取数据并继续执行。
从流程上来看,使用select函数进行IO请求和同步阻塞模型没有太大的区别,甚至还多了添加监视socket,以及调用select函数的额外操作,效率更差。但是,使用select以后最大的优势是用户可以在一个线程内同时处理多个socket的IO请求。用户可以注册多个socket,然后不断地调用select读取被**的socket。
这种IO被Redis所运用,Redis采用的就是单线程的多路IO复用实现高效的缓存IO操作。因此这种模型适合单线程处理多个IO请求

(4)异步IO:
常见IO模型

相关文章:

  • 2021-07-07
  • 2021-08-28
  • 2021-07-26
  • 2022-02-16
  • 2021-08-25
  • 2021-08-08
  • 2021-12-02
猜你喜欢
  • 2021-09-23
  • 2021-11-29
  • 2021-04-20
  • 2021-12-29
  • 2021-06-29
相关资源
相似解决方案