441p ~ 468p
μ 체 νμλΌμΈμ κ°μκ° μ μμλ‘ μ΄ν΄νκΈ° μ½λ€.
νμλΌμΈ λ΄ λ¨κ³μ κ°μκ° μ μμλ‘ μ΄ν΄νκΈ° μ½λ€.
곡μ νλ μμμ΄ μ μμλ‘ μ΄ν΄νκΈ° μ½λ€.
μμμ 곡μ νλ€λ©΄ μλ‘ μ‘°μ¨ν΄μΌ νλ€.
μκ°μ μΌκΈμΌλ‘ λ€λ£¬λ€.
μμμ 곡μ νλ "μ‘μ "λ€μ΄ μ€νλλ μμλ₯Ό κ³ λ €νλ κ³Όμ μ΄λ€.
function add_item_to_cart(item) {
cart = add_item(cart, item);
calc_cart_total(cart, update_total_dom);
}
function calc_cart_total(cart, callback) {
var total = 0;
cost_ajax(cart, function(cost) {
total += cost;
shipping_ajax(cart, function(shipping) {
total += shipping;
callback(total);
});
});
}
function add_item_to_cart(item) {
cart = add_item(cart, item);
update_total_queue(cart); // action
}
function calc_cart_total(cart, callback) {
var total = 0;
cost_ajax(cart, function(cost) {
total += cost;
shipping_ajax(cart, function(shipping) {
total += shipping;
callback(total);
});
});
}
var queue_items = [];
function runNext() {
var cart = queue_items.shift();
calc_cart_total(cart, update_total_dom);
}
function update_total_queue(cart) { // action
queue_items.push(cart);
setTimeout(runNext, 0);
}
function add_item_to_cart(item) {
cart = add_item(cart, item);
update_total_queue(cart);
}
function calc_cart_total(cart, callback) {
var total = 0;
cost_ajax(cart, function(cost) {
total += cost;
shipping_ajax(cart, function(shipping) {
total += shipping;
callback(total);
});
});
}
var queue_items = [];
var working = false; ////
function runNext() {
if(working) ////
return; ////
working = true; ////
var cart = queue_items.shift();
calc_cart_total(cart, update_total_dom);
}
function update_total_queue(cart) {
queue_items.push(cart);
setTimeout(runNext, 0);
}
var queue_items = [];
var working = false;
function runNext() {
if(working)
return;
working = true;
var cart = queue_items.shift();
calc_cart_total(cart, function(total) {
update_total_dom(total);
working = false; ////
runNext(); ////
});
}
function update_total_queue(cart) {
queue_items.push(cart);
setTimeout(runNext, 0);
}
var queue_items = [];
var working = false;
function runNext() {
if(working)
return;
if(queue_items.length === 0) ////
return; ////
working = true;
var cart = queue_items.shift();
calc_cart_total(cart, function(total) {
update_total_dom(total);
working = false;
runNext();
});
}
function update_total_queue(cart) {
queue_items.push(cart);
setTimeout(runNext, 0);
}
function Queue() { ////
var queue_items = [];
var working = false;
function runNext() {
if(working)
return;
if(queue_items.length === 0)
return;
working = true;
var cart = queue_items.shift();
calc_cart_total(cart, function(total) {
update_total_dom(total);
working = false;
runNext();
});
}
return function(cart) { ////
queue_items.push(cart);
setTimeout(runNext, 0);
};
}
var update_total_queue = Queue(); ////
function Queue(worker) {
var queue_items = [];
var working = false;
function runNext() {
if(working)
return;
if(queue_items.length === 0)
return;
working = true;
var cart = queue_items.shift();
worker(cart, function() { //// done()
working = false;
runNext();
});
}
return function(cart) {
queue_items.push(cart);
setTimeout(runNext, 0);
};
}
function calc_cart_worker(cart, done) { ////
calc_cart_total(cart, function(total) {
update_total_dom(total);
done(total); //// done()
});
}
var update_total_queue = Queue(calc_cart_worker);
function Queue(worker) {
var queue_items = [];
var working = false;
function runNext() {
if(working)
return;
if(queue_items.length === 0)
return;
working = true;
var item = queue_items.shift();
worker(item.data, function(val) { ////
working = false;
setTimeout(item.callback, 0, val); ////
runNext();
});
}
return function(data, callback) {
queue_items.push({
data: data, ////
callback: callback || function(){} ////
});
setTimeout(runNext, 0);
};
}
function calc_cart_worker(cart, done) {
calc_cart_total(cart, function(total) {
update_total_dom(total);
done(total);
});
}
var update_total_queue = Queue(calc_cart_worker);
/// Dropping Queue
function DroppingQueue(max, worker) {
var queue_items = [];
var working = false;
function runNext() {
if(working)
return;
if(queue_items.length === 0)
return;
working = true;
var item = queue_items.shift();
worker(item.data, function(val) {
working = false;
setTimeout(item.callback, 0, val);
runNext();
});
}
return function(data, callback) {
queue_items.push({
data: data,
callback: callback || function(){}
});
while(queue_items.length > max)
queue_items.shift();
setTimeout(runNext, 0);
};
}
function calc_cart_worker(cart, done) {
calc_cart_total(cart, function(total) {
update_total_dom(total);
done(total);
});
}
var update_total_queue = DroppingQueue(1, calc_cart_worker);
μ 리
Queue()
λ ν¨μλ₯Ό μΈμλ‘ λ°μ λ λ€λ₯Έ ν¨μλ₯Ό 리ν΄νλ ν¨μμ΄λ€.Queue()
λ μ΄λ€ ν¨μλ₯Ό μλ‘μ΄ νμλΌμΈμμ μ€ννκ³ ν λ²μ ν νμλΌμΈλ§ μ€νν μ μλλ‘ λ§λ€μ΄μ£Όλ κ³ μ°¨ν¨μμ΄λ€.Queue()
λ μ‘μ
μ 'μμ 보μ₯' μνΌνμλ₯Ό μ£Όλ λꡬμ΄λ€.Queue()
λ λμμ± κΈ°λ³Έν(concurrency primitive) μ΄λ€.π‘ 곡μ νλ λ°©λ²μ νμ€μμ μ°©μνκΈ°
μΈκ°μ μΈμ λ μμμ 곡μ νλ€. μ΄λ₯Ό μ°©μνμ¬, μ»΄ν¨ν°μκ²λ μΈκ°μ λ°©λ²κ³Ό λΉμ·νκ² μμμ 곡μ ν μ μλλ‘ νλ‘κ·Έλλ° ν μ μλ€.
νμ€μμ μ΄λ€ μΌμ΄ μμλλ‘ μ§νλκ² νλ λ°©λ²μ νλλ μ€μ μλ κ² -> queueλ₯Ό λ§λ€μ΄ μ»΄ν¨ν°κ° μμ μ μμλλ‘ μ§ννκ² νλλ‘ νλ€.
λ€λ₯Έ μ
1. ν λ²μ ν λͺ
μ© μΈ μ μκ² νμ₯μ€ λ¬Έμ μ κΈ μ μλ€.
2. 곡곡 λμκ΄μ μ§μμ¬νκ° λ§μ μ±
μ 곡μ ν μ μλ κ³³μ΄λ€.
3. μΉ νμ μ¬μ©νλ©΄ μ μλ(κΈ°λ‘μ) νλͺ
μ΄ κ΅μ€ μ 체(μ΄λμ)μ μ 보λ₯Ό 곡μ ν μ μλ€.
λμμ± κΈ°λ³Έν(concurrency primitive)μ μμμ μμ νκ² κ³΅μ ν μ μλ μ¬μ¬μ© κ°λ₯ν μ½λλ₯Ό λ§ν©λλ€.
μ μ λ¨μ νμ΄μ§κ° μ€μ΄λ€κ³ μλ€.