2017-07-27 246 views
2

我想弄清楚Vertx的基礎知識。我正在通過它的標準文檔here,在那裏我偶然發現了上下文對象的部分。它說它可以讓你通過提供一種叫做runOnContext的方法運行你的代碼以後的。我不明白的是,在這種情況下,我會選擇在以後調用一個(非阻塞)代碼塊嗎?如果代碼是非阻塞的,無論現在執行還是更晚執行,都需要相同的時間。Vertx 3.4:立即運行代碼和context.runOnContext之間的區別

任何人都可以告訴我,在這種情況下,context.runOnContext會有幫助嗎?

回答

3

大多數情況下,如果從另一個線程調用它,這將會很有幫助。它將通過綁定到這個上下文的事件循環來安排一個執行任務。

如果您已經在事件循環中,您也可以在從隊列中讀取項目時使用它:不是將所有項目作爲單個事件處理,而是爲隊列中的每個項目安排一個事件。這會給其他類型的事件(網絡,文件系統)提前處理的機會。

+0

你能舉一個你正在做的第二點的例子嗎?我會說同樣的事情,但我嘗試過,但實際上並不奏效。例如,將CPU綁定任務分解爲更小的塊並單獨調度仍會阻止HTTP請求,直到完成所有處理(或者我做錯了)。你所做的第一點當然是正確的,但鏈接文檔不是用例。 –

+0

也許這是你的代碼中的一個問題。如果你運行'''Vertx vertx = Vertx.vertx(); 上下文context = vertx.getOrCreateContext(); context.runOnContext(V1 - > { 的System.out.println( 「一」); context.runOnContext(V2 - > { 的System.out.println( 「二」); }); 的System.out .println(「Three」); }); '''你會看到:「一,三,二」 – tsegismont

+0

不,它的工作原理,我不是在爭論這個。我說的是「給其他類型的事件(網絡,文件系統)提前處理的機會」實際上並非如此。如果你將代碼從3增加到runOnContext到一個相當大的數字,並且啓動一個httpserver,所有的http請求都會停止,直到你所有的runOnContext調用都完成了。也許我應該寫我自己的問題來說明這個示例代碼... –

相關問題