frontend - (4) : Blocking & Non-Blocking , Sync & Async

­이승환·2021년 8월 3일
0

Frontend

목록 보기
5/8

Blocking & Non-Blocking


호출되는 함수가 바로 리턴하여 제어권을 언제 넘겨주는지를 관심사로 갖는다.

Called FuncCallee Func 에 바로 리턴하고(결과가 없더라도), 호출한 함수에게 제어권을 넘겨주는 경우 Non-Blocking이다.

반대로 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에세 제어권을 넘겨주지 않고, 대기하게 만들면 Blocking 이다.

Sync & Async


Sync / Async 는 호출되는 함수의 작업 완료 여부를 누가 신경쓰냐가 관심사이다.

Callee Func에게 Called Func이 콜백함수를 전달하기 전까지 완료 여부를 신경쓰지 않으면 Async 이다.

반대로 Callee FuncCalled Func 의 리턴을 기다리거나, 작업이 끝나기전 제어권을 넘겨 받더라도 작업 완료 여부를 계속 스스로 확인하면 Sync 이다.

조합 분석


Blocking + Sync && Non-Blocking + Async

Blocking : 제어권을 바로 넘겨주지 않는다.
Sync : Callee Function 이 관심을 갖고 기다린다.

Non-Blocking : 제어권을 바로 넘겨주고, Callee function 은 다른 작업 수행
Async : Callee Function 은 작업 완료 여부를 전혀 신경쓰지 않고 다른 일을 진행한다.

NonBlocking + Sync

Non-Blocking : 제어권을 바로 Callee Function 에 전달한다
Sync : Callee Function 이 관심을 갖고 계속 완료를 확인한다.

main thread(Callee Function) 이라고 가정하면, 다른 작업을 진행할 수 있지만 계속 관심사를 물어본다.

Blocking + Async

Blocking : 제어권을 넘기지 않는다.
Async : Callee Function 에 관심을 갖으나 callback 을 넘겨받지 못해서 다른 작업이 불가능하다.

이 방식은 사실 개발자가 실수하는 케이스가 많고, node.js 와 MySQL 조합의 경우 이런 경우가 나타나기도 한다. mysql 미들웨어의 경우 Blocking 방식이라서 어쩔 수 없다고 한다.

정리


  • Blocking/NonBlocking은 호출되는 함수가 바로 리턴하느냐 마느냐가 관심사
    + 바로 리턴하지 않으면 Blocking
    + 바로 리턴하면 NonBlocking
  • Synchronous/Asynchronous는 호출되는 함수의 작업 완료 여부를 누가 신경쓰냐가 관심사
    + 호출되는 함수의 작업 완료를 호출한 함수가 신경쓰면 Synchronous
    + 호출되는 함수의 작업 완료를 호출된 함수가 신경쓰면 Asynchronous
  • 성능과 자원의 효율적 사용 관점에서 가장 유리한 모델은 Async-NonBlocking 모델이다.
profile
Mechanical & Computer Science

0개의 댓글