[ 동기와 비동기 ]
동기
Synchronous
동기는 말 그대로 동시에 일어난다는 뜻이다. 요청과 그 결과가 동시에 일어난다는 약속이다.
바로 요청을하면 시간이 얼마가 걸리던지 요청한 자리에서 결과가 주어져야 한다.
- 요청과 결과가 한 자리에서 동시에 일어남
- A노드와 B노드 사이의 작업 처리 단위(
transaction
)을 동시에 맞추겠다. - 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 하는 단점이 있다.
비동기
Asynchoronous
비동기는 동시에 일어나지 않는다를 의미한다. 요청과 그 결과가 동시에 일어나지 않을거라는 약속이다.
- 요청한 그 자리에서 결과가 주어지지 않음
- 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
- 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다는 장점이 있다.
비유를 통한 쉬운 설명
해야할 일(task)가 빨래, 설거지, 청소 세 가지가 있다고 가정한다. 이 일들을 동기적으로 처리한다면 빨래를 하고 설거지를 하고 청소를 한다. 비동기적으로 일을 처리한다면 빨래하는 업체에게 빨래를 시킨다. 설거지 대행 업체에 설거지를 시킨다. 청소 대행 업체에 청소를 시킨다. 셋 중 어떤 것이 먼저 완료될지는 알 수 없다. 일을 모두 마친 업체는 나에게 알려주기로 했으니 나는 다른 작업을 할 수 있다. 이 때는 백그라운드 스레드에서 해당 작업을 처리하는 경우의 비동기를 의미한다.
Sync vs Async
일반적으로 동기와 비동기의 차이는 메소드를 실행시킴과 동시에
반환 값이 기대되는 경우를 동기 라고 표현하고 그렇지 않은 경우에 대해서 비동기 라고 표현한다. 동시에라는 말은 실행되었을 때 값이 반환되기 전까지는 blocking
되어 있다는 것을 의미한다. 비동기의 경우, blocking
되지 않고 이벤트 큐에 넣거나 백그라운드 스레드에게 해당 task 를 위임하고 바로 다음 코드를 실행하기 때문에 기대되는 값이 바로 반환되지 않는다.
비동기 방식의 예제를 통해서 블록(Block)과 논블록(NonBlock)의 차이를 간략하게 설명하자면, 빨래 업체에게 빨래를 시킨 후 가만히 앉아 빨래완료 라는 연락만을 기다린다면 블록 상태이다. 하지만 빨래가 완료되었다는 전송을 받기 전까지 다른 설거지나 청소를 하게되면 학생의 상태는 논블록 상태 라고한다.
'Computer Science > [ OS ]' 카테고리의 다른 글
[ OS ] 07. 프로세스 동기화 - 임계영역문제의 해결책 ? Mutex, Semaphore ! (0) | 2021.05.30 |
---|---|
[ OS ] 06. 프로세스 동기화 - 임계영역(Critical Section) (0) | 2021.05.30 |
[ OS ] 04. CPU Scheduler (0) | 2021.05.27 |
[ OS ] 03. 스케쥴러 (Scheduler) (0) | 2021.05.26 |
[ OS ] 02. 멀티스레드 (0) | 2021.05.26 |