- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
console.log('hello world'), 1000) 会将函数放置到某个任务队列中运行。但如果它前面还有其他任务,它就不会精确地在 1-6ren">
如果我理解正确,setInterval(() => console.log('hello world'), 1000)
会将函数放置到某个任务队列中运行。但如果它前面还有其他任务,它就不会精确地在 1000 毫秒或每次都运行。
在一个复杂的程序中,是否可以使用 Node.js 在现实世界中每 n 毫秒精确地调用某个函数?
最佳答案
If I understand correctly, setInterval(() => console.log('hello world'), 1000) will place the function to some queue of tasks to run. But if there are other tasks in-front of it, it won't run exactly at 1000 millisecond or every time.
这是正确的。如果当计时器准备好运行时,node.js 恰好忙于做其他事情,那么它就不会准确地在所需的时间运行。 Node.js 将等待它完成其他任务,然后再运行计时器回调。您可以将 Node.js 视为单向思维(一次只能做一件事),并且计时器永远不会中断正在运行的现有任务。
In a single complex program, is it possible to also make calls to some function every n millisecond exactly in real world time with node.js ?
不,在 Node.js 中不可能做到这一点。 node.js 以单线程方式运行 Javascript,它是事件驱动的且非抢占式的。所有这些意味着您不能依赖在精确的现实时间运行的代码。
node.js 中发生的事情是为 future 的特定时间设置一个计时器。该计时器已在 node.js 事件循环中注册,以便每次通过事件循环时,它都会检查是否有任何待处理的计时器。但是,只有当计时器准备好触发之前运行的其他代码完成运行时,它才会通过事件循环。以下是事件的顺序:
所以,你的计时器在大约时间 X 被调用的唯一方法是,如果 Node.js 在时间 X 没有其他事情可做。如果你的程序在做其他事情,你不能保证你的程序会在时间 X 有空,可以在您希望计时器运行时准确地运行计时器。 Node.js 无论如何都不是一个实时系统。单线程和非抢占式意味着计时器可能必须等待 Node.js 完成其他一些事情才能运行,因此不能保证计时器会准时运行。相反,当解释器下次有空返回到事件循环时,它将像在时间 X 之前一样运行(完成运行当时可能正在运行的任何其他操作)。这可能接近时间 X,也可能是时间 X 之后的一段重要时间。
如果您确实需要在特定时间精确运行某些东西,那么您可能需要一个比 Node.js 更加实时的抢占式系统(不是 Node.js)。
<小时/>您可以通过启动另一个node.js进程(您可以使用child_process模块)在node.js中创建一个“解决方法”,并在另一个进程中启动一个程序,该程序除了为您的计时器服务之外没有其他事情可做并执行与该计时器相关的代码。然后,至少你的计时器不会被其他可能正在运行的 Javascript 任务抢占,并且会在非常接近所需时间的情况下运行。请记住,即使这种解决方法仍然不是真正的实时系统,但可能有一些用途。
否则,您可能希望使用更实时的系统语言来编写此语言,该语言具有抢占式计时器(甚至可能具有线程优先级)。
关于node.js - 如何在 "real world"时间内每 n 毫秒调用一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53569180/
为了让我的代码几乎完全用 Jquery 编写,我想用 Jquery 重写 AJAX 调用。 这是从网页到 Tomcat servlet 的调用。 我目前情况的类似代码: var http = new
我想使用 JNI 从 Java 调用 C 函数。在 C 函数中,我想创建一个 JVM 并调用一些 Java 对象。当我尝试创建 JVM 时,JNI_CreateJavaVM 返回 -1。 所以,我想知
环顾四周,我发现从 HTML 调用 Javascript 函数的最佳方法是将函数本身放在 HTML 中,而不是外部 Javascript 文件。所以我一直在网上四处寻找,找到了一些简短的教程,我可以根
我有这个组件: import {Component} from 'angular2/core'; import {UserServices} from '../services/UserService
我正在尝试用 C 实现一个简单的 OpenSSL 客户端/服务器模型,并且对 BIO_* 调用的使用感到好奇,与原始 SSL_* 调用相比,它允许一些不错的功能。 我对此比较陌生,所以我可能会完全错误
我正在处理有关异步调用的难题: 一个 JQuery 函数在用户点击时执行,然后调用一个 php 文件来检查用户输入是否与数据库中已有的信息重叠。如果是这样,则应提示用户确认是否要继续或取消,如果他单击
我有以下类(class)。 public Task { public static Task getInstance(String taskName) { return new
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我有一个java spring boot api(数据接收器),客户端调用它来保存一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(应该处理持久化的数据 - 数据聚合器),它应该自行异
首先,这涉及桌面应用程序而不是 ASP .Net 应用程序。 我已经为我的项目添加了一个 Web 引用,并构建了各种数据对象,例如 PayerInfo、Address 和 CreditCard。但问题
我如何告诉 FAKE 编译 .fs文件使用 fsc ? 解释如何传递参数的奖励积分,如 -a和 -target:dll . 编辑:我应该澄清一下,我正在尝试在没有 MSBuild/xbuild/.sl
我使用下划线模板配置了一个简单的主干模型和 View 。两个单独的 API 使用完全相同的配置。 API 1 按预期工作。 要重现该问题,请注释掉 API 1 的 URL,并取消注释 API 2 的
我不确定什么是更好的做法或更现实的做法。我希望从头开始创建目录系统,但不确定最佳方法是什么。 我想我在需要显示信息时使用对象,例如 info.php?id=100。有这样的代码用于显示 Game.cl
from datetime import timedelta class A: def __abs__(self): return -self class B1(A):
我在操作此生命游戏示例代码中的数组时遇到问题。 情况: “生命游戏”是约翰·康威发明的一种细胞自动化技术。它由一个细胞网格组成,这些细胞可以根据数学规则生存/死亡/繁殖。该网格中的活细胞和死细胞通过
如果我像这样调用 read() 来读取文件: unsigned char buf[512]; memset(buf, 0, sizeof(unsigned char) * 512); int fd;
我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
我希望能够从 cmd 在我的 Windows 10 计算机上调用 python3。 我已重新安装 Python3.7 以确保选择“添加到路径”选项,但仍无法调用 python3 并使 CMD 启动 P
我是一名优秀的程序员,十分优秀!