Search

동기와 비동기, Blocking과 Non-blocking

생성일
2023/05/26 10:42
태그

Synchronous vs Asynchronous

동기 처리 방식은 요청한 작업에 대해 완료 여부를 따져 순차대로 처리하는 것을 말한다. 반대로 비동기 처리 방식은 요청한 작업에 대해 완료 여부를 따지지 않고 자신의 다음 작업을 수행하는 처리 방식이다.
위처럼 동기는 B 작업의 여부를 확인하며 B 작업이 완료되어야 다음 작업을 수행하는 반면, 비동기는 작업 B를 실행시키고 완료 여부와 관계 없이 다음 작업을 수행한다.
비동기 처리 방식은 위와 같이 여러 프로세스에서 동시에 작업을 수행할 때 성능 향상을 기대할 수 있다. ‘동시에 처리’ 한다는 개념은 멀티 스레드나 멀티 프로세싱으로 두 개 이상의 작업이 병렬적으로 실행되는 것을 의미한다.
이처럼 동기와 비동기는 요청한 작업에 대해 완료 여부를 확인하는 차이인데, 이는 여러 개의 요청 작업을 순차적으로 처리하는가 아닌가의 차이라고 볼 수 있다. 따라서 동기 처리 방식은 작업에 대해 순서가 지켜지지만, 비동기 처리 방식은 작업의 순서가 지켜지지 않을 수도 있다.

Blocking vs Non-blocking

Blocking과 Non-blocking의 차이는 이름에서도 알 수 있듯이, 다른 요청의 작업을 처리하기 위해 현재 작업을 block(차단, 대기) 시키냐와 아니냐의 차이이다.
파일을 읽는 작업을 처리한다면, Blocking 방식은 파일을 다 읽을 때까지 대기하는 반면 Non-blocking 방식은 파일을 다 읽지 않아도 다른 작업을 수행할 수 있다.

동기/비동기 vs Blocking/Non-blocking

이렇게 정리하여도 동기/비동기와 Blocking/Non-blocking의 차이가 잘 안느껴질 수 있다. 간단하게 설명하자면 동기/비동기는 전체적인 작업에 대한 순차적인 흐름의 유무라면, Blocking/Non-blocking은 전체적인 작업의 흐름을 막는가의 여부라고 볼 수 있다.
이렇게 두 개념은 유사하지만 서로 다른 개념이다. 프로그램 아키텍쳐에서는 아래처럼 이 두 개념을 조합되어 사용된다.
Synchronous + Blocking
Synchronous + Non-blocking
Asynchronous + Blocking
Asynchronous + Non-blocking