Sync
Async
Sub Routine
으로부터 나중에 Callback
으로 받음Sub Routine
)로 빼서 실행하고, 완료되면 호출하는 측에 알려주는 것Block
Blocking
NonBlock
nonBlocking
const sum = (n, f) => {
let sum = 0;
for(let i = 0; i <= n;i++) sum +=i;
// 플로우제어권 안주고 한큐에 끝냄 (block)
return sum;
}
sum(10);
// 그냥 리턴 (async)
const sum => n => {
const result = {isComplete:false};
requestAnimationFrame(()=>{
let sum = 0;
for(let i = 0; i <= n;i++) sum +=i;
result.isComplete = true;
result.value = sum;
})
return result;
}
const result = sum(100);
const id = setInterval(()=>{
if(result.isComplete){
clearInterval(id);
console.log(result.value);
}
}, 10)
sync nonBlocking
은 미래의 나( 다음 frame )한테 넘기고 그냥 지금 나는 리턴하고 도망가벌임
const sum = (n, f) => {
let sum = 0;
for(let i = 0; i <= n;i++) sum +=i
// 플로우제어권 안주고 한큐에 끝냄 (block)
return f(sum)
}
sum(10, console.log);
// 콜백으로 결과 리턴 (async)
console.log(123);
// 55 -> 123
const sum = (n,f) => {
// 플로우제어권 바로 반환하고 다음프레임에 소환
// (nonBlock)
requestAnimationFrame(()=>{
let sum = 0;
for(let i = 1; i<= n; i++) sum += i;
f(sum)
})
}
sum(10, console.log);
// 콜백으로 결과 리턴 (async)
console.log(123);
// 123 -> 55
참고