繁体   English   中英

多线程或不多线程 - JavaScript

[英]To multithread or not to multithread - JavaScript

我目前正在尝试类似于太空入侵者的JavaScript射击游戏。 它现在的编码方式,无论是移动的抛射物还是船只。 任何玩过原版的人都知道这不好。 我记得在我的Java课程中进行多线程处理,并想知道这是否是正确的方法,还是有另一种方法可以做到这一点? 例如:

Thread Move start;
Thread Move run;
Thread Shoot start;
Thread Move run;
Thread Shoot run;
Thread Shoot end;
Thread Move run;
Thread Move end;

您可以在Javascript中使用WebWorkers ,但它们与真正的多线程环境无关,就像在java中一样。 您将不得不采用不同的方法进行游戏开发,使用一种循环技术在同一个线程下更新游戏的逻辑,抱歉。 :(在javascript中为线程添加的支持仍然非常笨拙,而且在我看来几乎是一个噱头,唯一一个有Chrome的人,因为你不一定要复制传递给线程的所有数据。这就是为什么线程在javascript中是hamstrung:

  1. 没有真正访问dom
  2. 大多数(如果不是全部)(取决于引擎)数据必须复制到其他线程,这意味着如果要在后台处理大量数据,则必须首先对该数据执行复制
  3. WebWorkers上的错误并不总是非常明显(有时你会得到随机的,难以理解的错误)

由于WebWorkers具有巨大的潜力,但对我而言,他们的使用受到此时对他们的限制的严重限制。 也许你可以在游戏中找到聪明的用途。

传统上,JavaScript是单线程的,因此使用Java中习惯的线程是不可行的。 JavaScript的一个相对新近的增加是web worker( 这里spec ),它提供了真正的多线程。 但是, 浏览器之间的支持有些变化,您可以通过工作线程进行限制,并且线程之间的通信很痛苦。

您还可以使用Clumpy.js之类的东西来模拟异步执行。

无论你做什么,重要的是不要阻止主线程。 整个浏览器窗口无响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM