有一段时间我正在研究很多关于项目反应堆,Mono's,Flux's和我对这个问题有点困惑。
我想在这里告诉一些关于我理解的假设,也许你可以告诉我,我正走在正确的道路上。
我对Reactive概念感兴趣的原因,我认为它类似于Jetty Server中名为'Continuations'的概念,它简单地说,当Jetty Server收到请求时,自然应该通过服务器线程提供服务Jetty Continuation是,如果该线程进入等待\阻塞状态,则继续将接管等待状态并释放线程以执行实际工作而不是阻塞并且不执行任何操作,如果继续获取可能继续工作的事件,则继续将传递适合时间的结果。
对于Project Reactor,原理是否相同,有很多关于发布/订阅Mono \ Flux和限制的讨论,但我不能在这里清楚地看到相同的延续概念。
其次,Jetty Continuation需要Native IO能够提供功能,但Project Reactor不是一个Web项目,所以它是如何实现这种行为的。
或者我完全理解这些概念?
感谢答案。
答案 0 :(得分:1)
reactor-core
正在处理单个JVM中的异步处理和编排。
它应用非阻塞模式,以便多个事件序列可以由单个线程处理,但也提供了许多基元(称为运算符)来构建异步处理管道(异步序列)。其中一些运算符允许您控制执行的位置。
在Reactor中,来自给定序列的运算符永远不会阻塞它执行的线程,因为该线程可能涉及另一个单独的序列。因此,对于执行用户代码的操作员来说,重要的是所述用户代码不会阻塞(或者它可能阻止超过相关序列)。
此外,还有一个名为reactor-netty
的面向网络IO的项目。顾名思义,它在着名的非阻塞网络IO库Netty
之上引入了一个反应式API,与Jetty延续相比,它使用了另一个接近(从我对这些的理解),但最终目标是相同(每个请求不要做1个线程,避免等待IO完成的线程)。
查看学习资料的reference documentation和learn page。