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