Blocking vs Non-Blocking

funca(){
//
	b = funcb()//3초
// b+=1
}

funcb(){
	//약 10초 정도 걸리는 로직
	return 3
}
  1. funcb호출 시점에 funca라는 funcb의 호출자는 제어권을 funcb에게 넘겨줌.
  2. funcb에게 제어권이 넘어간 상태이기 때문에 funca는 실행되지않고 블로킹 되어있으며, funcb가 약 10초정도 모든 로직을 수행하여 결과값을 만들어 return 할때 결과값과 제어권을 동시에 넘겨주어 funca가 다시 실행되고 이때 b에는 3 이라는 funcb return 값이 들어감.
  1. funcb호출 시점에 funca라는 funcb의 호출자는 제어권을 funcb에게 넘겨줌.
  2. funcb에게 넘어간 제어권이 바로 다시 funca로 넘어오고 funca 는 funcb 결과값을 return 하지않았음에도 실행됨.
  3. funcb가 10초뒤 실행을 끝마치고 나면 3이라는 결과값을 리턴함.(funcb가 개별적으로 실행될 수 있도록 하기위해 별도의 쓰레드를 생성할 수 있음.)

Synchronous vs Asynchronous