首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“隔离”在V8中的作用是什么?如何才能孤立地“孤立”呢?

“隔离”在V8中的作用是什么?如何才能孤立地“孤立”呢?
EN

Stack Overflow用户
提问于 2015-03-27 11:14:12
回答 2查看 3.2K关注 0票数 8

我到目前为止发现的“隔离”的解释。

例1:1Isolate.html

“隔离器代表V8引擎的一个孤立实例。V8隔离器具有完全独立的状态。来自一个隔离点的对象不能用于其他隔离。当V8初始化时,默认隔离将被隐式创建和输入。嵌入程序可以创建额外的隔离,并在多个线程中并行使用它们。在任何给定的时间,最多一个线程可以输入一个隔离。Locker/Unlocker可以用于同步。”

例2:刚开始

“隔离是一个有自己堆的VM实例。”

好的,我明白了。“隔离”是一个可以单独操作的隔离线程。以下是我的问题。

  1. 对我来说,它就像一个线程,只是它有自己的堆。有什么不同吗?
  2. 我认为“隔离”可以用于实现并发GC。上述定义指出,每一个“隔离”都不能用于其他“隔离”。但是并发GC应该检查(或标记)主(或其他)线程(或隔离)的活动对象。
  3. 怎么可能保护自己的物品呢?“隔离”是一个线程,而不是一个进程。因此,其他线程可以访问该线程的对象,如果它知道地址。怎么能保护它?我不明白自己堆的意思。因为如果其他线程知道地址,则其他线程可以访问它。而普通线程可以在内存空间中拥有它们的堆。由于堆的地址空间不是完全分开的,但是如果一个线程malloc是一个内存,除非其他线程知道地址,否则其他线程如何使用它?每个线程只有malloc自己的堆空间和“隔离”有自己的堆空间有什么区别?

我的问题可以很容易地总结,“隔离”的作用是什么,以及如何能够拥有自己的堆空间,以及为什么它必须有自己的堆。

如果有人分享一些关于“孤立”的好文件,那将是非常有帮助的。感谢您的阅读。

-把问题弄清楚-我问题的关键是问:是什么让谷歌在V8中实现了隔离?隔离的好处是什么?在V8中使用隔离的好例子是什么?它们同时执行的(分离)是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-27 13:43:22

  1. 对我来说,它就像一个线程,只是它有自己的堆。有什么不同吗?

它们是正交的,一个线程可以一次执行多个隔离,而一个隔离只能一次由一个线程执行。当然,一个隔离可以在不同的时间由不同的线程执行,但它可能并不常见。隔离仅是JavaScript VM的一个实例,并且它只有自己的JavaScript堆,正常进程堆仍以正常方式在进程中共享。

  1. 我认为“隔离”可以用于实现并发GC。上述定义指出,每一个“隔离”都不能用于其他“隔离”。但是并发GC应该检查(或标记)主(或其他)线程(或隔离)的活动对象。

标记扫描GC中的非紧致扫描操作可以从另一个线程并发执行。其他GC操作,如压缩扫描、清道夫、标记只能在JS不在隔离中执行时才能执行。

  1. 怎么可能保护自己的物品呢?“隔离”是一个线程,而不是一个进程。因此,其他线程可以访问该线程的对象,如果它知道地址。怎么能保护它?我不明白自己堆的意思。因为如果其他线程知道地址,则其他线程可以访问它。而普通线程可以在内存空间中拥有它们的堆。由于堆的地址空间不是完全分开的,但是如果一个线程malloc是一个内存,除非其他线程知道地址,否则其他线程如何使用它?每个线程只有malloc自己的堆空间和“隔离”有自己的堆空间有什么区别?

嗯,您不知道地址,而且不可能将它固定在V8 API上。即使您可以获得地址,使用该地址也是不安全的,因为V8不断地在其堆中移动内容。而且malloc将不会返回指向某些隔离器的js堆的地址,因为很明显,该隔离器已经对内存进行了错误处理。

票数 8
EN

Stack Overflow用户

发布于 2015-03-27 11:49:05

隔离:我们可以使用单个JavaScript实例独立运行多个V8函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29299397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档