【发布时间】:2017-10-27 06:13:13
【问题描述】:
我正在阅读this article on web workers,我遇到了关于可转移对象的这一部分:
使用 Transferable Objects,数据可以从一个上下文传输到另一个上下文。它是零拷贝,极大地提高了向 Worker 发送数据的性能。如果您来自 C/C++ 世界,请将其视为传递引用。但是,与传递引用不同的是,调用上下文中的“版本”在转移到新上下文后将不再可用。
为什么?根据我对抽象堆栈机器的理解,可以保留原始指针似乎是完全合理的。诚然,由于数据现在是从另一个上下文中引用的,因此继续使用它将是一项棘手的任务,但并非完全不合理。为什么原始对象被清除了?
如果有人对此有一些有价值的见解,我还想了解整个过程是如何在幕后进行的。
【问题讨论】:
-
因为这是 转让 它而不是 分享 它的全部意义:无法继续使用它,所以(你可以请确保)您不必处理线程安全的棘手问题。
-
谢谢你,@Bergi。你知道这个设计决定是否在 JS 社区中引起争论吗?还是来回传输被普遍认为是最优雅、最好的整体解决方案?
-
我看不出那个解决方案有什么问题,为什么你会设计它不同 - 如果你这样做了,它就不会再被称为“可转移对象”了。如果您想要继续处理数据,并且能够处理棘手的问题,there's shared memory as well。您只需选择您需要的。
标签: javascript web-worker transferable