首页 >

如何理解springwebflux的“非阻塞”? – 网络|

台式电脑连小米路由器密码怎么办,主板怎么插,怎么办理400电话如何理解springwebflux的“非阻塞”? - 网络|如何理解springwebflux的“非阻塞”

-阻塞IO

-非阻塞IO

-同步IO

-异步IO

-同步阻塞IO

-同步非阻塞IO

-异步阻塞IO

-异步非阻塞IO

只要理解了这些,你就能理解webflux的非阻塞了!

IO

一个IO操作其实有两个步骤:发起IO请求和实际的IO操作

阻塞IO和非阻塞IO的区别在于第一个步骤是否阻塞:发起IO请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞IO;如果不阻塞,那么就是非阻塞IO

同步IO和异步IO的区别就在于第二个步骤是否阻塞:如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步IO;如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO

举个不太恰当的例子:比如你家网络断了,你打电话去中国电信报修!

-你拨号—客户端连接服务器

-电话通了—连接建立

-你说:“偶家网断了,帮偶修下”—发送消息

-说完你就在那里等,那么就是阻塞IO

-如果正好你有事,你放下电话,然后处理其他事情了,过一会你来问下,修好了没—那就是非阻塞IO

-如果客服说:“马上帮你处理,你稍等”—同步IO

-如果客服说:“马上帮你处理,好了通知你”,然后挂了电话—异步IO

回到问题

SpringMVC5以前,一个请求过来后的流程大致是这样的:

  • 服务端接收到请求,从线程池获取一个线程来处理

  • 线程处理完成后,返回数据

  • 线程被释放回线程池中

可以看到,当一个请求过来后,所有的处理结束后才会得到响应。

Webflux基于Reactor模型,一个主从Reactor模型如下图:

  • 主Reactor用于响应连接请求,接收到请求后就分配一个channel,然后直接响应客户端

  • 从Reactor用于处理IO操作请求,但是不处理具体逻辑

  • 具体逻辑由工作线程去处理。工作线程处理完成后再去通知响应。


如何理解springwebflux的“非阻塞”? - 网络|
  • 理想速印机维修代码理想速印机两边打不上字是什么原因? - 网络|
  • 理想速印机维修代码理想速印机两边打不上字是什么原因? - 网络| | 理想速印机维修代码理想速印机两边打不上字是什么原因? - 网络| ...

    如何理解springwebflux的“非阻塞”? - 网络|
  • 用文本文档写的代码怎么运行? - 网络|
  • 用文本文档写的代码怎么运行? - 网络| | 用文本文档写的代码怎么运行? - 网络| ...

    如何理解springwebflux的“非阻塞”? - 网络|
  • 360浏览器不解析css |vim html css js
  • 360浏览器不解析css |vim html css js | 360浏览器不解析css |vim html css js ...