본문 바로가기
넓고 얕은 CS 지식

동기 & 비동기 / 블로킹 & 논블로킹 3분 요약 정리

by 팡펑퐁 2023. 3. 7.
728x90
💡 동기 & 비동기 / 블로킹 & 논블로킹은 같거나 비슷한 개념이 아니라 함께 사용되므로 한 번에 정리한다.

 

동기 & 비동기

  • 처리해야 할 작업을 어떠한 '흐름'으로 처리할 것인가에 대한 관점으로 나뉜다.

 

동기(Synchronous)

  • 작업을 동시에 수행하거나, 동시에 끝나거나, 다른 작업이 끝나는 동시에 시작한다.
  • 함수 A가 함수 B의 작업 완료 여부를 확인한다.

 

비동기(Asynchronous)

  • 함수 A가 함수 B를 호출한 후에 함수 B의 작업 완료 여부는 신경 쓰지 않는다. 바로 시작한다.

 

 

블로킹 & 논블로킹

  • 제어권이 누구에게 있느냐에 대한 관점으로 나뉜다.

 

블로킹(Blocking)

  • A 함수가 B 함수를 호출하면 B 함수에게 제어권을 넘겨준다.
  • B는 A로부터 받은 제어권으로 함수를 실행하고 A는 B에게 제어권을 넘겼음으로 실행이 중단된다.
  • B 함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다.

 

논블로킹(Non-Blocking)

  • A 함수가 B 함수를 호출해도 제어권은 그대로 자신이 가지고 있는다.
  • A함수는 계속 제어권을 가지고 있기 때문에 B 함수를 호출한 이후에도 자신의 코드를 계속 실행할 수 있다.

 

 

조합

Sync-Blocking

  • 함수는 다른 함수의 리턴값을 필요로 한다. (동기)
  • 함수는 다른 함수에게 제어권을 넘기고 대기한다. (블로킹)
  • 자바에서 코드 실행 후 커맨드에서 입력을 받을 때(제어권이 사용자에게 넘어가 입력할 때까지 대기함)

 

Sync-NonBlocking

  • 함수는 다른 함수의 리턴값을 필요로 한다. (동기)
  • 함수는 다른 함수에게 제어권을 넘기지 않고 자신의 코드를 계속 실행한다. (논블로킹)

 

Async-Blocking

  • 함수는 다른 함수의 리턴값을 고려하지 않고 동작한다. (비동기)
  • 함수는 다른 함수에게 제어권을 넘기고 대기한다. (블로킹)
  • 거의 사용되지 않는다.

 

Async-Nonbloking

  • 함수는 다른 함수의 리턴값을 고려하지 않고 동작한다. (비동기)
  • 함수는 다른 함수에게 제어권을 넘기지 않고 자신의 코드를 계속 실행한다. (논블로킹)
728x90