這些對象在V8中有什麼區別/連接?上下文是否屬於隔離區,反之亦然?我知道一次只能由一個線程訪問一個單獨的隔離區(這就是我猜的v8 :: Locker)。v8 :: Isolate和v8 :: Context的區別究竟是什麼?
我查看了文檔,但我似乎無法掌握這些概念 - 任何幫助表示讚賞!
這些對象在V8中有什麼區別/連接?上下文是否屬於隔離區,反之亦然?我知道一次只能由一個線程訪問一個單獨的隔離區(這就是我猜的v8 :: Locker)。v8 :: Isolate和v8 :: Context的區別究竟是什麼?
我查看了文檔,但我似乎無法掌握這些概念 - 任何幫助表示讚賞!
我確信以下是簡化,但它適用於我。
一種隔離是V8運行時的一個獨立的副本,包括一個堆管理器,垃圾收集器等只有一個線程可以每次訪問一個給定的分離物,但不同的線程可以訪問不同的分離物同時進行。
然而,隔離不足以運行腳本。您還需要一個全局(根)對象。 A 上下文通過將隔離區堆中的對象指定爲全局對象來定義完整的腳本執行環境。
因此,不僅可以在給定的隔離中存在許多上下文,而且它們還可以輕鬆安全地共享任何或所有對象。這是因爲他們的對象實際上屬於隔離區,並受隔離區獨佔鎖的保護。
Isolates
,顧名思義,是完全封閉的外部世界,所以Isolates
可以並行運行,因爲它們完全是V8的不同實例。將Isolate
想象成一個沙箱 - 一個V8運行時環境。
現在在Isolate
之內,您可能會有許多不相關的JavaScript應用程序同時運行。 JavaScript提供了很多全球級的語言工具,並且有多個不相關的應用程序與這些「單身人士」混在一起並不是一個好主意。因此,在V8的一個實例中稱爲Isolate
,您可以定義多個Contexts
,以便不相關的應用程序可以在不干擾彼此的情況下做他們需要做的事情。
這不是一個完美的類比,但是如果您瞭解Java Web的東西,可以想象Tomcat的多個實例部署在同一臺機器上,然後Tomcat的每個實例都使用自己的Web上下文和web.xml運行單獨的應用程序。這就是這樣的。
希望有所幫助。
菌株共享相同的平臺信息,因此它們不是完全隔離的。他們並沒有完全不同 – xaxxon