要多线程还是不要多线程- JavaScript

To multithread or not to multithread - JavaScript

本文关键字:多线程 JavaScript      更新时间:2023-09-26

我目前正在尝试一款类似于《太空入侵者》的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中的线程被破坏了:

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

因此,WebWorkers具有巨大的潜力,但对我来说,它们的使用受到目前对它们施加的限制的严重限制。也许你可以在游戏中巧妙地使用它们。

传统上,JavaScript是单线程的,所以像在Java中那样使用线程是不可行的。JavaScript中一个相对较新的特性是web workers,它提供了真正的多线程功能。然而,浏览器之间的支持是可变的,工作线程可以做的事情受到限制,线程之间的通信是痛苦的。

你也可以使用一些类似的东西来模拟异步执行。

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