首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:如何在javascript中实现多线程?

Javascript:如何在javascript中实现多线程?
EN

Stack Overflow用户
提问于 2020-05-07 00:40:23
回答 1查看 80关注 0票数 0

我正在建立一个小的两人游戏应用程序。实时地将数据从一个播放器发送到另一个播放器是非常重要的,因此套接字看起来很有希望。

我在一些地方读到javascript不支持多线程。那么,对于两端通信,可能的解决方案是什么,因为需要两个线程来并行管理C1->C2和C2->C1通信。

我的高级架构看起来像这样

在一个网页中,javascript如何管理三个线程?一个用于C1到C2的消息传输,第二个用于C2到C1的消息传输,第三个用于用户界面?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-07 01:02:27

JavaScript程序使用“运行到完成”语义在单个执行线程上运行。

在其他语言中通常会阻塞的操作是非阻塞的,并且简单地移交给宿主(在本例中是浏览器),并通过事件异步地通知您的程序进度。

当宿主引发要由您的程序使用的事件时(例如,入站消息),它将该事件的通知作为“作业”放入队列中。当该作业到达队列的前部时,一旦调用堆栈为空(即,当前运行的脚本已运行到完成),则JavaScript运行时将该作业出队并调用与其关联的延续函数(即。被配置为处理事件的程序部分)。

您的游戏将通过网络发送消息(例如通过WebSocket)。您的程序将简单地将每条消息传递给浏览器。这个过程在计算上并不昂贵,也不耗费时间。该浏览器是多线程的,将为您处理低级和耗时的网络问题。

JavaScript是一种基于事件的语言。如果您希望收到与您发送的消息相关的未来事件的通知,那么您可以提供一个回调(或使用promise),以便在将来的适当时间由运行时调用,而不是简单地等待它。通过这种方式,有效地利用了主线程上可用的时间。

您的游戏循环可能会使用requestAnimationFrame。这为您提供了大约每帧16毫秒的计算时间。游戏状态的计算可能需要几毫秒。处理计划的和基于时间的事件可能还需要几毫秒的时间。最后,渲染也需要一些时间。实际上,您的程序在单个执行线程上协同执行多个任务。

对于长时间运行、计算昂贵的任务,您可以使用Worker API创建新的执行线程,以便以受控的方式与之通信,但在这里您可能不需要这样做。

网上已经有很多关于这个话题的信息。搜索“事件循环是如何工作的”。

相关问题hereherehereherehere

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61640487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档