- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一种服务(游戏),其中一组用户将位于一个房间中,该房间将在一定的持续时间(例如30秒)内通过每个用户做出选择。如果用户在此期间内未做出选择,则服务将自动为该用户生成选择。如果在持续时间完成之前做出选择,则下一个用户启动,计时器应重置。
一次可能有成百上千个这样的房间/游戏。
我想知道如何实现这一点,并且愿意使用Javascript或Python解决方案。
对于Python,我正在考虑从线程库中生成尽可能多的计时器,但不确定性能影响。所有需要做的就是自动生成一个完全不占用资源的选择,然后使用SQLAlchemy更新postgres。
我还可以使用celery,并使用相同的方法为我的消息代理提供延迟的任务。
对于Javascript,类似于python的第一个解决方案,我可以根据需要生成尽可能多的setTimeouts
,但是问题是所有超时都在主线程上起作用,但是就像我说的那样,任务不是资源密集型的,我只需要对第二。
这些是我迄今为止介绍的唯一解决方案,我想知道哪种解决方案最好,并且对其他解决方案也开放。
最佳答案
Node.js计时器非常有效地实现。它们的实现(在有关它们如何工作的详细文章中进行了介绍)可以轻松处理非常多的计时器。
它们被保存在一个双向链表中,该链表已排序,只有下一个要触发的计时器才具有与之关联的实际libuv系统计时器。当该计时器启动或被取消时,列表中的下一个计时器将变为附加到实际libuv系统计时器的计时器。设置新的计时器后,它将被插入已排序的列表中,除非它成为要触发的下一个计时器,否则它将仅位于列表中等待下一个计时器。您可以非常高效地拥有成千上万个此类文件。
以下是有关这些计时器如何工作的一些资源:
How many concurrent setTimeouts before performance issues?
How does nodejs manage timers internally
第一个引用文献包含来自实际nodejs代码的大量注释,这些注释描述了计时器链表系统的工作方式以及针对其进行了优化的内容。
第二篇文章为您提供了有关其组织方式的更高层次的描述。
还有其他效率,因此当一个计时器到达列表的开头并触发时,然后在调用该回调之后,node.js会检查列表的开头是否有其他现在也准备触发的计时器。这将清除所有具有与第一个相同的“目标时间”的其他计时器,以及所有其他在运行这些其他回调时到期的计时器。
当您有数千个计时器时,如果其中有很多计时器,则将新计时器插入到已排序的链表中会花费稍长的时间,但是一旦插入,几乎没有多少意义,因为它只是在查看下一个要开火。因此,坐在那里等待成千上万个计时器的过程只是一个系统计时器(代表要触发的下一个计时器事件)和一堆数据。所有其他 future 计时器的数据都不会花您任何钱。
For Javascript, similar to the python's first solution, i could spawn as many setTimeouts as necessary, but the problem is that all timeouts work on the main thread, but like i said, the tasks are not resource intensive and I only need accuracy to the second.
setTimeout()
调用数量。如果您在node.js中遇到问题,那不是由于计时器的数量引起的,但是如果您要处理的工作量超过一个内核所能处理的数量,则必须确保为该问题使用了足够的CPU。您可以通过nodejs集群或使用工作线程或其他nodejs进程来帮助进行处理的工作队列来扩展核心用途。 node.js本身对任何与I / O相关的事情都非常有效,因此,只要您不进行大量的CPU密集型计算,单个node.js线程就可以处理许多事件处理。
关于node.js - 在设置大量计时器或使用计划的任务队列之间寻找解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59655705/
我只是想知道要安装哪个版本的 Visual Studio 2010(专业版或高级版)提示升级项目.. 项目包括:asp.net mvc、数据库和silverlight。 最佳答案 通常,由不同版本的相
几种通过 iproute2 来打通不同节点间容器网络的方式 几种通过 iproute2 来打通不同节点间容器网络的方式 host-gw ipip vxlan 背景 之前由于需
目录 前言 1、TypeHandler 简介 1.1转换步骤 1.2转换规则 2、JSON 转换 3、枚举转换 4、文章小结
目录 前言 1、常见 key-value 2、时效性强 3、计数器相关 4、高实时性 5、排行榜系列 6、文章小结 前言 在笔者 3 年的
目录 前言 四、技术选型 五、后端接口设计 5.1业务系统接口 5.2App 端接口 六、关键逻辑实现 6.1Red
目录 前言 一、需求分析 1.1发送通知 1.2撤回通知 1.3通知消息数 1.4通知消息列表 二、数据模型设计
目录 前言 一、多租户的概念 二、隔离模式 2.1独立数据库模式 2.2共享数据库独立数据架构 2.3共享数据库共享数据架构
导读: 虽然锁在一定程度上能够解决并发问题,但稍有不慎,就可能造成死锁。本文介绍死锁的产生及处理。 死锁的产生和预防 发生死锁的必要条件有4个,分别为互斥条件、不可剥夺条件、请求与保持条件和循环等待条
在浏览网页后,我找不到任何功能来执行此操作,我有可行的个人解决方案。也许它对某人有用。 **使用 Moment 插件转换日期。***moment(currentPersianDate).clone()
是否有一种解决方案可以很好地处理数字(1-10)手写?我试过tesseract,但我得到的只是垃圾。 理想情况下是 OSS,但商业也可以。 最佳答案 OpenCV 现在带有手写数字识别 OCR 示例。
在服务器应用程序上,我们有以下内容:一个称为 JobManager 的单例类。另一个类,Scheduler,不断检查是否需要向 JobManager 添加任何类型的作业。 当需要这样做时,调度程序会执
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
当您尝试从 GitHub 存储库安装某些 R 包时 install_github('rWBclimate', 'ropensci') 如果您遇到以下错误: Installing github repo
问题在以下链接中进行了描述和演示: Paul Stovell WPF: Blurry Text Rendering www.gamedev.net forum Microsoft Connect: W
我正在寻找一种解决方案,使用标准格式 a × 10 b 在科学记数法下格式化 R 中的数字。一些同行评审的科学期刊都要求这样做,并且手动修改图表可能会变得乏味。 下面是 R 标准“E 表示法”的示例,
已编辑解决方案(如下...) 我有一个启动画面,它被打包到它自己的 jar 中。它有效。 我可以通过以下方式从另一个 java 应用程序内部调用 Splash.jar: Desktop.getDesk
什么是创建像 PageFlakes 或 iGoogle 这样的门户网站的好框架/包? ?我们希望创建一个为员工提供 HR 服务的员工/HR 门户,但我们也需要一种足够灵活的产品,以便我们可以使用它来为
我正在寻找一种解决方案,使用标准格式 a × 10 b 在科学记数法下格式化 R 中的数字。一些同行评审的科学期刊都要求这样做,并且手动修改图表可能会变得乏味。 下面是 R 标准“E 表示法”的示例,
如何将 solr 与 heritrix 集成? 我想使用 heritrix 归档一个站点,然后使用 solr 在本地索引和搜索该文件。 谢谢 最佳答案 使用 Solr 进行索引的问题在于它是一个纯文本
完整日历不包含工作时间功能选项(在任何一天的议程 View 中选择第一行和最后一行 - 例如公司不工作)。我做到了类似的事情: viewDisplay: function(view){
我是一名优秀的程序员,十分优秀!