到目前为止我发现的“隔离”的解释。
经验 #1:http: //izs.me/v8-docs/classv8_1_1Isolate.html
“Isolate 表示 V8 引擎的一个隔离实例。V8 隔离具有完全独立的状态。来自一个隔离的对象不得在其他隔离中使用。当 V8 初始化时,会隐式创建并输入默认隔离。嵌入器可以创建其他隔离和在多个线程中并行使用它们。在任何给定时间最多可以有一个线程进入隔离。Locker/Unlocker API 可用于同步。”
经验 #2:https ://developers.google.com/v8/get_started
“隔离是一个拥有自己堆的虚拟机实例。”
好的我明白了。“隔离”是一个可以单独操作的隔离线程。以下是我的问题。
它看起来对我来说只是线程,除了它有自己的堆。有什么区别吗?
我认为“隔离”可用于实现并发 GC。上面的定义说每个“隔离”不能用于其他“隔离”。但是并发 GC 应该检查(或标记)主(或其他)线程(或 Isolate)的活动对象。怎么可能?
怎么可能保护自己的对象?“隔离”是线程而不是进程。因此,如果其他线程知道地址,则可以访问该线程的对象。怎么可能保护它?而且我无法理解自己的堆的含义。因为如果其他线程知道地址,它可以被其他线程访问。并且普通线程可以在内存空间中有它们的堆。由于堆的地址空间没有完全分开,但是如果一个线程 malloc 内存,除非其他人知道地址,否则其他线程如何使用它?每个线程只是 malloc 自己的堆空间和“隔离”有自己的堆空间有什么区别?
我的问题可以很容易地概括为“隔离”的作用是什么,怎么可能有自己的堆空间,为什么必须有自己的堆。
如果有人分享一些关于“隔离”的好文档,那将非常有帮助。谢谢阅读。
---- 把问题说清楚---- 我的问题的重点是问:是什么让google 在V8 中实现isolate?隔离的好处是什么?在 V8 中使用隔离的一个很好的例子是什么?他们(隔离)同时执行什么?