2016-09-23 85 views
1

我必須使用C++ wrapper圍繞V8處理大量JS腳本,並且我需要並行執行它。如何從C++使用V8同時運行一堆JS代碼?

例如,我有兩個腳本A和B.我已經使用C++ V8函數編譯了這些腳本,並且希望以並行方式或至少以異步方式運行它,以便腳本B不會等待腳本A完成。

現在我正在考慮使用線程,但在這種情況下,我必須使用互斥鎖,這意味着代碼將相應地運行(不是我想要的)。

也許有一些能夠從C++異步使用V8運行js代碼.. 無論如何,有什麼辦法可以運行幾個腳本,它們將並行工作嗎?

+0

不確定我得到了互斥體的用途,以及如果您有任何要求,他們不會同時運行,您希望如何以任何方式同時運行它們。請詳細說明。 –

+0

互斥體只是爲了防止v8線程安全。長話短說 - 我需要同時在v8中運行腳本。 –

回答

0

爲了同時執行兩個javascript線程,它們必須在不同的v8 :: Isolate中。這意味着他們不能共享任何數據或具有任何共享依賴關係。

這還需要使用v8 :: Locker,以便在運行時將另一個上下文使用的隔離區鎖定。

您是否使用額外的互斥量取決於您的程序數據要求,但在v8內運行多個線程並不是必需的 - 只是每個線程的隔離度。

+0

非常感謝您的回答。 v8 :: Locker是否會造成瓶頸?還是兩個不同的v8 ::隔離運行確實分開? –

+0

它有一個相關的成本,但這個成本是不可避免的,所以它並不重要。至於它是否是一個「瓶頸」,則取決於整個系統。 – xaxxon

+0

我發現了另一個有關這個問題的好答案http://stackoverflow.com/a/19394400/6135922。看起來你可以通過不同的上下文同時運行js腳本,而不是孤立的。你怎麼看 ? –