동기(Synchronous)
- 동기는 말 그대로 동시에 일어난다는 의미
- 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다.
- 순서에 맞춰 진행되는 장점이 있지만, 여러 가지 요청을 동시에 처리할 수 없다.
비동기(Asynchronous)
- 비동기는 동시에 일어나지 않는다는 의미
- 요청과 결과가 동시에 일어나지 않을 거라는 약속
- 하나의 요청에 따른 응답을 즉시 처리하지 않아도, 그 대기 시간동안 또 다른 요청에 대해 처리 가능한 방식이다.
동기와 비동기의 특징
- 동기의 특징
- 설계가 매우 간단하고 직관적이다
- 결과가 주어질 때까지 아무것도 못하고 대기해야한다.
- 비동기방식
- 동기보다 복잡하다.
- 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 작업을 할 수 있으므로 자원을 효율적으로 사용가능
블록과 논블록
- 블록
- 작업이 완료될 때까지 제어권을 반환하지 않는 방식
- 파일 I/O, 소켓 I/O 등등 사용
- 함수 a가 함수 b를 호출한다고 가정 했을 때 함수 a는 제어권을 함수 b에게 양도하기 때문에 b가 완료 되어 제어권이 돌아오기 전까지 a의 실행이 멈춘다.
- 논블록
- 작업이 완료되지 않아도 제어권을 즉시 반환하는 방식
- 네트워크 서버, 이벤트 드리븐 시스템, 논블로킹 I/O, 멀티스레드 환경에서위 동시성 제어 등등 사용
- 함수 a가 함수 b를 호출해도 제어권을a가 가지고 있기 때문에 함수 b가 실행되는 와중에도 함수 a가 실행된다.
동기,비동기,블로킹,논블로킹의 조합
- 동기 + 블록
- 동기 + 블로킹 조합은 다른 작업이 진행되는 동안 자신의 작업을 처리하지 않고, 다른 작업의 완료 여부를 받아 순차적으로 처리하는 방식.
- a의 작업 결과가 b작업에 영향을 주는 경우 활용할 수 있다.
- 동기 + 논블록
- 동기 + 논블록 조합은 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고, 다른 작업의 결과를 바로 처리하지 않아 작업 순서가 지켜지지 않아도되는 방식.
- a의 작업을 진행하면서 b의 작업을 진행한다. b의 작업이 끝나는 것을 주기적으로 확인한다.
- 예를 들자면 로딩창 등이 동기 + 논블록이라고 할 수 있다.
- 비동기 + 블록
- 비동기 + 블로킹 조합은 다른 작업이 진행되는 동안 자신의 작업을 멈추고 기다리는 (Blocking), 다른 작업의 결과를 바로 처리하지 않아 순서대로 작업을 수행하지 않는 (Async) 방식이다
- 해당 경우의 경우 실무에서 마주치기 쉽지 않다.
- 비동기 + 논블록
- 다른 작업이 진행되는 동안 자신의 작업을 처리하고, 다른 작업의 결과를 바로 처리하지 않아 작업순서가 지켜지지 않는 방식
- 함수 a가 함수 b,c,d를 호출 할 경우 a는 자신의 일을 처리하고 b,c,d가 각각 작업을 종료할 경우 콜백 함수를 통해 작업의 결과를 따로 후처리할 수 있게 된다.
'CS' 카테고리의 다른 글
교착상태와 기아상태 (0) | 2025.03.17 |
---|---|
스레드 세이프(Thread Safe) (0) | 2025.03.13 |
컨텍스트 스위칭(context Switching) (0) | 2025.03.12 |
프로세스와 스레드의 차이 (0) | 2025.03.12 |
CORS(교차 출처 리소스 공유) (0) | 2025.03.11 |