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 |