“调用栈”和“任务队列”的区别

Sau*_*hra 5 javascript jquery callstack task-queue

我是一名开发人员,难以区分Call Stack和Task Queue两个术语。有没有人可以帮我解释一下区别?

提前致谢。

Wei*_*Lin 5

例如。

在 JavaScript 中有一个名为 timeout 的函数。当您在“调用堆栈”上调用函数超时时,它会在“作业队列”中注册。它不会立即触发,但会在到达时间后触发。

timeout(function(){
    console.log("one");
}, 100);

console.log("two");
Run Code Online (Sandbox Code Playgroud)

在调用堆栈中,console.log("one")首先触发,但在作业队列中,结果会在 之后显示two。


Rob*_*Rob 2

作业队列(有时是批处理队列)是由包含要运行的作业的作业调度程序软件维护的数据结构。

https://en.wikipedia.org/wiki/Job_queue

调用堆栈是一种堆栈数据结构,用于存储有关计算机程序的活动子例程的信息。这种堆栈也称为执行堆栈、控制堆栈、运行时堆栈或机器堆栈,并且通常简称为“堆栈”。

https://en.wikipedia.org/wiki/Call_stack

简而言之,作业队列是要做的事情的队列(通常持久存储),而调用堆栈是例程的堆栈。

作业将分配有变量,调用堆栈将是抽象实现。

因此,作业可以从调用堆栈“调用”方法。

编辑:可能有一个工作列表;

  • 将 foo.jpg 大小调整为 100x100
  • 将 bar.png 大小调整为 100x100

每个作业都会多次运行调用堆栈;

第一份工作

  • 将 foo.jpg 复制到内存中
  • 将其大小调整为 100x100
  • 将调整大小后的 foo.jpg 存储在拇指文件夹中

第二份工作:

  • 将 bar.png 复制到内存中
  • 将其大小调整为 100x100
  • 将调整大小后的 foo.jpg 存储在拇指文件夹中