“不相关的异步调用堆栈”的技术名称是什么?我想说,“我如何等到一个不相关的 ___ 完成?[关闭]

What is the technical name for, "Unrelated asynchronous call stacks?" I want to say, "How do I wait until an unrelated ___ completes?" [closed]

提问人:Daniel Kaplan 提问时间:10/25/2023 最后编辑:Mark RotteveelDaniel Kaplan 更新时间:10/25/2023 访问量:76

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答。

29天前关闭。

想象一下这样的代码(这个例子是错误的,但它只是为了澄清我的问题):

// In one code block...
const async1 = new Promise((resolve) => {
  addListenerThatResolvesWhenAsync2Completes(resolve);
});


// Potentially, in another code block. 
// Potentially, in a separate event loop iteration.
setTimeout(() => dispatchAsync2CompleteEvent(), delay); // this setTimeout "spawns" async2
  1. async1是一个承诺,是一个async2setTimeout
  2. 两者都是异步的。
  3. 它们存在于单独的链中; 等待完成,但除此之外,它们是不相关的。async1async2

如果这两个都是承诺,我就不需要问这个问题了。我想如果我说“承诺并行运行”,人们会理解我的意思。但据我了解,因此,它不会创造一个承诺。是否有术语表示“Promise 和 setTimeout 与不相关的调用堆栈并行运行?setTimeoutasync2

如果这是另一种编程语言,我也许可以说“单独的线程”或“单独的进程”,但在给定的示例中,这两种方法在技术上都不正确。

JavaScript 术语

评论

2赞 Barmar 10/25/2023
我认为它们只是异步操作。
3赞 jonrsharpe 10/25/2023
“任务”,一般来说,尽管它们进入不同的队列 - 参见例如 stackoverflow.com/q/66387109/3001761。最好问一个 Meta Stack Overflow 问题(或点击聊天)以获得支持,写下您想问的实际问题,您认为这些问题会让人们感到困惑。
3赞 Mike 'Pomax' Kamermans 10/25/2023
有趣的事实:promise 不是并行运行的,它们只是异步的(JS 是单线程的,除非你使用的是 worker,所以没有并行性,只有异步性)。说它们并行运行“很容易说”,同时也说错了话。你显示的代码在 promise 和(间接,正因为如此)由计时器触发的函数之间具有异步依赖关系。addListenerThatResolvesWhenAsync2Completes
2赞 jonrsharpe 10/25/2023
我的意思是,例如 chat.stackoverflow.com/rooms/17/javascript,不要仅仅为了决定应该使用什么词而创造一些空间。
2赞 Heretic Monkey 10/25/2023
我已经阅读了相当多的内容,已经在这个网站上工作了 11+ 年。但尽管如此,这是一个单词选择问题;即使有“一个真实的话语”(在黑暗中束缚他们),也没关系;一个非常突出的选择是忽略这一点,并使用一些其他短语,这些短语对你的听众来说意味着一些技术上不到 100% 正确但更有意义的短语。

答:

3赞 Bergi 10/25/2023 #1

术语“线程”和“进程”是指特定的操作系统资源(或运行时,对于由虚拟机管理的线程)。

如果想不那么具体,只需说“异步任务”或“异步操作”,它们可以彼此并发运行。这意味着在(通常是线性的)链中生成的任何代码执行序列,形成一个带有结果的执行单元。

请注意,promise 不会“运行”,就像它们不会“执行”一样 - promise 表示异步结果,而不是可调用函数。

评论

0赞 Daniel Kaplan 10/25/2023
您的答案充满了有用的信息。谢谢。我不确定我是否理解你的意思,.具体来说,“在通常的线性链中生成”是什么意思?也许你可以解释一下。我想我正在寻找一个术语,意思是“它们不是在线性链中产生的”。This means any sequence of code executions that are spawned in a (usually linear) chain
1赞 Pointy 10/25/2023
这个答案的“承诺不会运行”部分(对我来说)非常重要。Promise 表示诸如书签之类的东西,这些书签正在等待完全在运行时外部执行某些操作,并在完成(或任何其他显著事件)时通知运行时已发生某件事。可能在某个地方发生“奔跑”,但这不是应许;它只是像一本书中间的便利贴一样坐在那里。
1赞 Bergi 10/25/2023
@DanielKaplan我试图在那里表现得非常模棱两可......第一个任务包含创建 promise 的代码,然后等待事件,然后解析 promise。第二个任务包含创建计时器的代码,然后计时器生成另一个运行事件调度程序的函数调用。我想说,这些序列中的每一个都是线性的。
0赞 Daniel Kaplan 10/25/2023
@Pointy 这难道不取决于构造函数的实现和 then/catch/finally 回调吗?查看我的示例代码,哪个部分完全位于“运行时”之外?Promises represent ... something completely external to the runtime to do something
0赞 Pointy 10/25/2023
@DanielKaplan文件系统操作、对外部服务的网络请求,甚至定时器服务:所有这些都由运行时下的操作系统代理。如果您了解老式的 UNIX 编程(或现代 Linux),那么 Promise 表示等待调用触发的东西。某处正在发生一些事情,但在等待时,关于应许的存在,没有什么可以真正被描述为“奔跑”。select()