【问题标题】:Difference between "call stack" and "task queue"“调用栈”和“任务队列”的区别
【发布时间】:2016-02-25 18:12:25
【问题描述】:

我是一名开发人员,难以区分术语 Call StackTask Queue。有谁能帮我解释一下区别吗?

提前致谢。

【问题讨论】:

  • 这是个好问题

标签: javascript jquery callstack task-queue


【解决方案1】:

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

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 存储在 thumbs 文件夹中

第二份工作:

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

【讨论】:

  • 那么...什么是堆栈溢出?
  • 这意味着堆栈中的内容超出了它所能容纳的范围 :) 或者它是一个非常简洁的网站,您可以在其中找到答案和发布问题。
  • 一个问题多于答案的网站。 :)
【解决方案2】:

例如。

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

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

console.log("two");

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

【讨论】:

    猜你喜欢
    • 2019-07-25
    • 2015-09-17
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2021-05-10
    相关资源
    最近更新 更多