본문 바로가기
CS 지식

Blocking 과 Non-Blocking

by chanfficial 2022. 11. 26.

Blocking

  • 요청한 작업을 마칠 때까지 계속 대기한다.
  • 즉시 return 하며 return 값을 받아야 끝난다.
  • Thread 관점에서는 요청한 작업을 마칠 때까지 계속 대기하며 return 값을 받을 때까지 하나의 Thread 를 계속 사용하고 대기한다.

 

Non-Blocking

  • 요청한 작업을 즉시 마칠 수 없다면 바로 return 한다.
  • 작업을 방해하며 즉시 return 하지 않는다.
  • Thread 관점에서는 하나의 Thread 가 여러 개의 IO 를 처리할 수 있다.

 


 

그리고 이와 비슷하게 느껴지는 동기와 비동기가 있다.

 

동기(Synchronous)

  • Thread1 이 작업을 시작 시키고 Task1 이 끝날 때까지 대기한 다음 Task2 를 시작한다.
  • 작업을 요청했을 때 요청 결과값을 직접 받는데, 요청 결과값은 return 값과 동일하다.
  • 호출한 함수가 작업 완료 여부에 관여한다.

 

비동기(Asynchronous)

  • Thread1 이 작업을 시작 시키지만 완료까지 대기하지 않고 다른 일을 처리할 수 있다.
  • 작업을 요청했을 때 요청 결과값을 간접적으로 받는데, 요청 결과값이 return 값과 다를 수 있다.
  • 해당 요청 작업은 별도의 thread 에서 실행한다.
  • callback 을 통한 처리가 비동기 처리하고 할 수 있다.
  • 호출된 함수(callback)가 작업 완료 여부에 관여한다.

 


 

동기/비동기 와 Blocking/Non-Blocking 의 조합

1. Blocking + Synchronous

: 결과가 처리되어 나올 때까지 기다린 후 return 값으로 결과를 전달한다.

 

2. Non-Blocking + Synchronous

: 작업 요청을 받아 별도의 프로세서에서 진행하게 한 후 바로 return(작업을 끝냄) 하고, 결과는 별도의 작업 후 간접적으로 전달(callback)한다.

 

3. Blocking + Asynchronous

:  호출되는 함수가 바로 return 하지 않고 호출하는 함수는 작업 완료 여부를 신경쓰지 않는다.

 

4. Non-Blocking + Asynchronous

: 결과가 없으면 바로 return 하고 결과가 있으면 그 결과를 바로 return 한다. (결과가 나올 때까지 계속 완료 여부를 확인함)

'CS 지식' 카테고리의 다른 글

기본 인덱스(Primary index)와 보조 인덱스(Secondary index)  (1) 2022.12.04
인덱스(Index)  (0) 2022.11.28
TLS(SSL) HandShake  (0) 2022.11.15
HTTP의 GET 과 POST  (0) 2022.11.12
HTTP 와 HTTPS  (0) 2022.11.12