2015-02-10 95 views
0

N00b問題中共享不可變的對象/函數。 我正在考慮將v8/SpiderMonkey嵌入到我的服務器代碼中。服務器每秒處理數千個請求。所以多線程是必須的。我只是想知道如果不同的線程可以共享編譯不可變的js函數和對象?所以我不需要在啓動一個新線程時重新啓動它們。 謝謝!在多線程環境(嵌入式v8)

回答

1

V8隔離是單線程的(一次只能有一個線程進入隔離區並訪問它的堆/執行其代碼),因此「創建新線程」意味着創建一個非常重的新隔離區重量級的東西,所以你絕對不會在響應請求中做到這一點。

您可以創建多個v8隔離並在它們自己的線程中並行運行它們,但它們都將是js運行時的獨立實例。他們的js堆中的任何東西都不能共享,儘管它們當然可以共享相同的C對象,它們擁有自己的精簡JS封裝副本。

但是,多線程並不是你必須要做的。如果您使用異步I/O併爲每個內核創建單獨的進程,則每秒提供數千次請求在單線程中是微不足道的。如果你想使用同步I/O併爲每個請求創建一個線程,那麼在V8中不可行。