2015-11-23 4 views
2

Я разработчик, испытывающий трудности с различиями между терминами Call Stack и Task Queue. Есть ли кто-нибудь, кто может помочь мне объяснить разницу?Разница между «стеком вызовов» и «очередью задач»

Заранее спасибо.

+1

Хороший вопрос .. –

+1

это хороший вопрос –

ответ

1

Очередь заданий (иногда периодическая очередь), представляет собой структуру данных, поддерживаемую программным обеспечением планировщика заданий, содержащим выполняемые задания.

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

Стек вызовов представляет собой структуру данных стеки, которая хранит информацию об активных подпрограммах компьютерной программы. Этот тип стека также известен как стек выполнения, стек управления, стек времени выполнения или стек стека и часто сокращается до «стека».

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

Так короче говоря, очередь заданий является очередью вещей, чтобы сделать (обычно хранится Устойчивые) и стек вызовов является стек подпрограмм.

У задания будут назначены переменные, а стек вызовов будет абстрактной реализацией.

Таким образом, работа может «вызывать» метод из стека вызовов.

EDIT: Может быть список рабочих мест;

  • Resize foo.jpg для 100x100
  • Resize bar.png для 100x100

и каждое задание будет запускать стек вызовов несколько раз;

Первой работа

  • Копия foo.jpg в память
  • Изменение размера, чтобы быть 100x100
  • магазина с новым размером foo.jpg в тумбах папки

второй работы :

  • Копия bar.png в память
  • Измените размер, чтобы быть 100x100
  • магазин с измененным размером foo.jpg в тумб папку
+0

Итак ... Что такое переполнение стека? – TrySpace

+0

Это означает, что в стек попадет больше, чем может удержать :) Это или его довольно аккуратный сайт, на котором вы можете найти ответы и задать вопросы. –

+0

Сайт с большим количеством вопросов, чем ответов. :) – ChrisM

3

например.

В JavaScript есть функция, называемая таймаутом. когда вы вызываете тайм-аут функции в «стеке вызовов», он регистрируется в «очереди заданий». Он не срабатывает немедленно, но будет срабатывать по достижении времени.

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

console.log("two"); 

в стеке вызовов, console.log("one") запускается первым, но в очереди заданий, то результат будет отображаться после two.