CHAPTER 17 타임라인 조율하기
타임라인을 나누기 위한 동시성 기본형
경쟁조건(race condition)은 어떤 동작이 먼저 끝나는 타임라인에 의존할 때 발생합니다
코드에 Cut() 적용하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| function Cut(num, callback) { var num_finished = 0; return function() { num_finished += 1; if(num_finished === num) callback(); }; }
var done = Cut(3, function() { console.log("3 timelines are finished"); }); done(); done(); done();
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function calc_cart_total(cart, callback) { var total = 0; var done = Cut(2, function() { callback(total); }); cost_ajax(cart, function(cost) { total += cost; done(); }); shipping_ajax(cart, function(shipping) { total += shipping; done(); }); }
|
딱 한 번만 호출하는 기본형
최초 한 번만 효과가 발생하는 액션을 멱등원(idempotent)이라고 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function sendAddToCartText(number) { sendTextAjax(number, "Thanks for adding something to your cart. Reply if you have any questions!"); }
function JustOnce(action) { var alreadyCalled = false; return function(a, b, c) { if(alreadyCalled) return; alreadyCalled = true; return action(a, b, c); }; }
var sendAddToCartTextOnce = JustOnce(sendAddToCartText);
sendAddToCartTextOnce("555-555-5555-55"); sendAddToCartTextOnce("555-555-5555-55"); sendAddToCartTextOnce("555-555-5555-55"); sendAddToCartTextOnce("555-555-5555-55");
|
요약: 타임라인 사용하기
- 타임라인 수를 줄입니다
- 타임라인 길이를 줄입니다
- 공유 자원을 업앱니다
- 동시성 기본형으로 자원을 공유한다
- 동시성 기본형으로 조율한다
참조