exp #1: http://izs.me/v8-docs/classv8_1_1Isolate.html “Isolate代表V8引擎的一个独立实例。V8隔离具有完全分离的状态。一个隔离中的对象不能在其他隔离中使用。当初始化V8时,会隐式地创建并进入默认隔离。嵌入程序可以创建额外的隔离,并在多个线程中并行使用它们。一个隔离每次只能被一个线程进入。Locker / Unlocker API可用于同步。”
exp #2: https://developers.google.com/v8/get_started “隔离是具有自己堆的VM实例。”
好的,我明白了。“Isolate”是一个可以单独运行的隔离线程。以下是我的问题。
对我来说,它看起来只是一个线程,但它有自己的堆。有什么区别吗?
我认为“Isolate”可以用于实现并发GC。上面的定义说每个“Isolate”不能在其他“Isolate”中使用。但并发GC应该检查(或标记)主线程(或其他线程或Isolate)的活动对象。这可能吗?
如何保护他们自己的对象?“Isolate”是一个线程而不是一个进程。因此,如果其他线程知道地址,它可以访问该线程的对象。如何保护呢?我无法理解拥有自己堆的含义。因为如果其他线程知道地址,它也可以访问。普通线程可以在内存空间中拥有它们的堆。由于堆的地址空间没有完全分离,但如果一个线程malloc一个内存,除非其他人知道地址,否则其他线程如何使用它?每个线程只malloc自己的堆空间和“Isolate”有自己的堆空间有什么区别?
我的问题可以轻松地总结为“Isolate”的作用是什么,如何拥有自己的堆空间以及为什么它必须拥有自己的堆。
如果有人分享一些关于“Isolate”的好文档,那将非常有帮助。谢谢阅读。
---- 清晰地表达问题 ---- 我的问题的关键点是: Q: 什么促使谷歌在V8中实现了隔离? 隔离的好处是什么?在V8中使用隔离的一个很好的例子是什么?它们(隔离)正在并发执行什么?