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
'넓고 얕은 CS 지식' 카테고리의 다른 글
스레드 풀 (0) | 2023.03.09 |
---|---|
멀티 프로세스와 멀티 스레드 (0) | 2023.03.08 |
디자인 패턴 - 싱글톤 패턴(Singleton Pattern) 1분 요약 정리(스프링에서의 싱글톤 패턴) (0) | 2023.03.04 |
컨텍스트 스위칭 & PCB 10초 요약 정리 (0) | 2023.02.18 |
Git과 명령어 (0) | 2022.08.29 |