Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么web workers不授予对DOM对象的访问权限?_Javascript_Web Worker_Worker - Fatal编程技术网

Javascript 为什么web workers不授予对DOM对象的访问权限?

Javascript 为什么web workers不授予对DOM对象的访问权限?,javascript,web-worker,worker,Javascript,Web Worker,Worker,我一直在使用javascript中的web workers。如果窗口、文档引用出现在web workers上下文中,那将是锦上添花。 我想知道,为什么选择不让员工访问这些参考资料 还有使用这些引用的方法吗?标准JavaScript和DOM API绝对没有排除机制,允许多个线程安全地访问相同的对象 JavaScript中允许多任务的最常用解决方案是隔离线程,只允许它们通过消息(或事件)进行交换。允许webworkers访问DOM将打破这种隔离 请注意,这并不是完全特定于JavaScript的:几乎

我一直在使用javascript中的web workers。如果窗口、文档引用出现在web workers上下文中,那将是锦上添花。 我想知道,为什么选择不让员工访问这些参考资料


还有使用这些引用的方法吗?

标准JavaScript和DOM API绝对没有排除机制,允许多个线程安全地访问相同的对象

JavaScript中允许多任务的最常用解决方案是隔离线程,只允许它们通过消息(或事件)进行交换。允许webworkers访问DOM将打破这种隔离

请注意,这并不是完全特定于JavaScript的:几乎所有GUI框架,无论使用何种语言,都将GUI的修改限制为一个专用线程。JavaScript的限制性更强,因为大多数情况下(总是在浏览器中),您根本无法共享对象


简单的解决方法是,当后台线程给出指令时,让浏览器中的主线程执行所需的修改。或者更确切地说:只在webworker中执行CPU扩展任务,让主线程获取输入数据,并在webworker发送输出数据时更新DOM。

应该注意的是,使用互斥锁和锁很容易使程序变慢(常见的“为什么我的多线程程序变慢”问题)。使共享内存程序快速运行的方法是构造代码,这样就很少碰到写锁。不幸的是,GUI程序往往会大量修改屏幕。这意味着使UI子系统多线程化会使程序比单线程程序慢得多。消息传递迫使程序员约束自己不要从多个线程写入DOM。