Javascript web worker比本机线程重还是轻

Javascript web worker比本机线程重还是轻,javascript,c++,multithreading,web-worker,emscripten,Javascript,C++,Multithreading,Web Worker,Emscripten,web worker只是由浏览器创建的正常本机线程,用于运行并通过消息队列与其他浏览器线程通信吗?或者它在创建时不包含其他东西吗 .时,多个工作人员可以以完全相同的方式看到C++中的其他工作人员对缓冲区的更新。 同时,工作人员不能根据定义阻塞主线程,因此具有更“本地”的感觉。有些web API并非对所有工作人员都可用,但这种情况正在发生变化。如果您编写了一个游戏,并且在不同的线程中有网络/音频/渲染/人工智能/输入,则这一点变得非常重要。网络正在慢慢地找到自己做这些事情的方式 细节有点棘手 S

web worker只是由浏览器创建的正常本机线程,用于运行并通过消息队列与其他浏览器线程通信吗?或者它在创建时不包含其他东西吗


<我在看EnScript,C++中的多个线程将被编译成Web工作者。但是,它是否具有与本机代码相同的性能级别?毕竟,细粒度多线程是C++中的一个关键特性。

目前,WebWork是相当重的,因为VM复制了它的内部状态(有时甚至是工人的重编码)。该状态比本机线程的初始堆栈空间和关联状态的几个MIB大得多

其中一些问题可以通过实现来解决,我希望,如果或+变得流行,那么浏览器引擎将希望优化这些问题

话虽如此,问题的结尾暗示了对线程开销的误解,以及对SharedArrayBuffer(Emscripten支持pthreads所依赖的SharedArrayBuffer)的建议是如何工作的。WebWork目前很重,但它们可以通过SABS与C++等本地代码完全相同的方式进行通信:通过访问相同的虚拟内存,在相同的虚拟地址中访问。SAB向JavaScript添加了一种新的ArrayBuffer,当您将
postMessage
发送给另一个工作者时,它不会被阉割。当使用<代码> STD::原子< /代码> .</P>时,多个工作人员可以以完全相同的方式看到C++中的其他工作人员对缓冲区的更新。 同时,工作人员不能根据定义阻塞主线程,因此具有更“本地”的感觉。有些web API并非对所有工作人员都可用,但这种情况正在发生变化。如果您编写了一个游戏,并且在不同的线程中有网络/音频/渲染/人工智能/输入,则这一点变得非常重要。网络正在慢慢地找到自己做这些事情的方式

细节有点棘手

SAB目前只支持非原子访问和顺序一致访问(即目前唯一可用的
原子访问与C++的
std::memory\u order\u seq\u cst
相同)。进行非原子访问的性能应该与C++的非原子访问的性能一样(这里我不会详细介绍大型编译器警告),而使用
atomic
的性能应该与C++的
std::atomic
default(即
std::memory\u order\u seq\u cst
)的性能一样。C++有5个其他内存顺序(<代码>轻松<代码> >代码>消费,<代码>获取<代码> >代码>发布< <代码> > <代码> ACQYRE > SAB目前不支持。这些其他内存顺序允许本机代码在某些情况下更快,但更难正确使用和移植。它们可能会添加到SAB的未来更新中,例如通过

SAB还支持
Futex
,本机程序依靠它来实现高效的
mutex


与C++相比,还有更微妙的细节,但是还有更多。

,WebWork是相当重的,因为VM复制了它的内部状态(有时甚至是工人的重编码)。该状态比本机线程的初始堆栈空间和关联状态的几个MIB大得多

其中一些问题可以通过实现来解决,我希望,如果或+变得流行,那么浏览器引擎将希望优化这些问题

话虽如此,问题的结尾暗示了对线程开销的误解,以及对SharedArrayBuffer(Emscripten支持pthreads所依赖的SharedArrayBuffer)的建议是如何工作的。WebWork目前很重,但它们可以通过SABS与C++等本地代码完全相同的方式进行通信:通过访问相同的虚拟内存,在相同的虚拟地址中访问。SAB向JavaScript添加了一种新的ArrayBuffer,当您将
postMessage
发送给另一个工作者时,它不会被阉割。当使用<代码> STD::原子< /代码> .</P>时,多个工作人员可以以完全相同的方式看到C++中的其他工作人员对缓冲区的更新。 同时,工作人员不能根据定义阻塞主线程,因此具有更“本地”的感觉。有些web API并非对所有工作人员都可用,但这种情况正在发生变化。如果您编写了一个游戏,并且在不同的线程中有网络/音频/渲染/人工智能/输入,则这一点变得非常重要。网络正在慢慢地找到自己做这些事情的方式

细节有点棘手

SAB目前只支持非原子访问和顺序一致访问(即目前唯一可用的
原子访问与C++的
std::memory\u order\u seq\u cst
相同)。进行非原子访问的性能应该与C++的非原子访问的性能一样(这里我不会详细介绍大型编译器警告),而使用
atomic
的性能应该与C++的
std::atomic
default(即
std::memory\u order\u seq\u cst
)的性能一样。C++有5个其他内存顺序(<代码>轻松<代码> >代码>消费,<代码>获取<代码> >代码>发布< <代码> > <代码> ACQYRE > SAB目前不支持。这些其他内存顺序允许本机代码在某些情况下更快,但更难正确使用和移植。它们可能会添加到SAB的未来更新中,例如通过

SAB还支持
Futex
,本机程序依靠它来实现高效的
mutex


<> P>和C++相比,还有更微妙的细节,但还有更多。

我猜测网络工作者只是一个线程库,推测网络工作者只是一个线程库。