2017-08-22 48 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