簡體   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