Sync/Async


함수의 완료 여부를 누가 신경쓰는가 - 콜백에 담냐?

호출되는 함수가 바로 제어권을 넘기느냐 마느냐가 관심사다. - 제어권 주냐?

Sync/Block

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/abdc80f2-91d2-4fa3-86db-bed02bb34295/Untitled.png

const sum = (n, f) => {
	let sum = 0;
	for(let i = 0; i <= n;i++) sum +=i;
	// 플로우제어권 안주고 한큐에 끝냄 (block)
	return sum;
}
sum(10);
// 그냥 리턴 (async)

Sync/NonBlock

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2906000e-594b-40ea-8a12-853f50f9ccd4/Untitled.png

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)

Async/Block (TRAP!!)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc8e710c-da35-4348-b595-d2a1fec430f7/Untitled.png

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

Async/NonBlock (우리의 지향점)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d2c0ad53-4894-4e57-b273-f7c5def32f4f/Untitled.png

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

참고


Blocking-NonBlocking-Synchronous-Asynchronous

Block, NonBlock & Sync, Async