2017-08-22 47 views
1

有一段时间我正在研究很多关于项目反应堆,Mono's,Flux's和我对这个问题有点困惑的地方。项目反应堆的工作原理

我想在这里告诉我了解一些假设和可能是你能告诉我,我是正确的路径或不上。

我对Reactive概念感兴趣的原因,我认为它类似于Jetty Server中的“Continuations”概念,简单地说,当Jetty Server获取请求时,自然应该通过服务器线程和Jetty延续是,如果该线程进入等待\阻塞状态,延续将接管等待状态并释放线程做实际工作而不是阻塞和无所事事,如果延续得到一个可能继续工作的事件,延续将会在合适的时间将结果交付给这个线程。

是对工程反应堆,是同样的原理,也谈了很多关于发布/订阅单\通量的和节流,但我不能清楚地看到这里延续相同的概念。

其次,码头延续的需要本地IO才能够提供的功能,但工程反应堆是不是一个web项目,所以它是如何实现这种行为。

或者我理解完全错误的概念?

Thx for answers。

回答

1

reactor-core被一个JVM中处理异步处理和编排。

它应用非阻塞模式,以便多个事件序列可以由单个线程处理,但也提供了很多基元(称为运算符)来构建异步处理管道(异步序列)。其中一些运算符允许您控制执行的地方。

在反应器从一个给定的序列的操作者不会阻塞在其中执行,因为线程可能在另一个独立的序列所涉及的线程。因此,对于执行用户代码的操作员而言,重要的是用户代码不会阻止任何用户代码(否则它可能会阻止超过相关的序列)。

此外,还有一个名为reactor-netty的网络IO导向项目。顾名思义,它会在着名的非阻塞网络IO库Netty之上引入一个反应式API,它使用了另一个与Jetty延续相比较的方法(根据我所了解的),但最终目标是相同的每个请求不做1个线程,避免只等待IO完成的线程)。

看一看在reference documentationlearn page学习材料。

+0

我读了文档,并试图使感觉主题有点难以掌握。 – posthumecaver

+0

我在这个主题上提出了一个话题,可以澄清范例,它在我上面链接的站点的学习部分。你有没有试过看? –

+0

我读过那些试图让人感觉到的东西,主题有点难以掌握。我有一个特殊的场景,但我不能确定它是否合理。假设我有一个经典的Spring REST服务,即服务S1,它调用另一个服务S2,S2处理需要一段时间,所以S1被阻塞。我打算使用Spring Webflux(使用响应原则)来构建某种代理服务S3,它只是将S1呼叫转发到S2,但在S2阻止S3 Webflux上的线程将可以免费服务来自S1的其他呼叫。这是一个正确的假设吗? – posthumecaver