동기(Sync) 비동기(Async)

송은혜·2022년 6월 7일
0

동기(Sync/Synchronous) 비동기(Async/Asynchronous)

간단히 동기와 비동기의 개념에 대해 이해한 대로 정리해보겠다.

동기? (Synchronous)

요청이 옴과 동시에 작업을 수행하고, 해당 작업이 끝날 때까지 기다린다.
=> 어떤 메소드를 실행 했을 때, 결과값이 도출되기까지 1분이 걸리든 5분이 걸리든 해당 메소드의 작업이 끝나야 다음 작업을 진행할 수 있다.

한 요청안에 무언가 실행되는 로직이 5가지가 있다면, 그 작업이 모두 끝이 나야 응답을 보내 줄 수 있다.
즉, 작업이 순차적으로 진행되며 어떤 작업이 수행중이면 다음작업은 대기하게 되는 직렬적방식이다.
*제어권의 반환과 결과값 리턴이 동시에 일어남!

비동기?

말 그대로 동기와 상반되는 뜻이다. 요청과 결과가 동시에 일어나지 않는다.
동기처럼 결과가 나오길 기다리지 않아도 된다. 한 작업이 수행중이더라도 다른 작업을 수행할 수 있다.

순차적으로 진행되는 방식이 아닌, 병렬적 방식으로 진행된다.

일반적으로 비동기에서는 콜백을 사용해 결과값을 도출한다.
=> 1부터 10까지의 모든 수를 더하는 메소드가 있다고 했을 때,
해당 메소드의 결과가 나오길 기다리지 않아도 다음 작업들이 시작된다.
해당 메소드의 결과가 알고 싶다면 콜백함수를 넣어, 작업이 완료되면 결과값을 확인하는 방법이 있다.


블로킹 , 논블로킹

블로킹 Blocking : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면, 다른 작업이 끝날때까지 기다렸다가 자신의 작업을 시작하는 것.

논블로킹 Non-Blocking : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것.

블로킹과 논블로킹은 제어권이라는 키워드로 구분지어 볼 수 있다.
볼로킹은 작업이 끝날 때까지 제어권을 쥐고 있는다
반면, 논블로킹은 제어권을 쥐고 있지않고 다른 메서드/함수들이 실행 될 수 있게 한다.


블로킹이 동기랑 같은 말이고, 논블로킹이 비동기랑 같은거 아냐 ??

=> 엄밀히 다른 개념이다.

블로킹과 논블로킹은 제어권을 키워드로 생각하고, 동기와 비동기는 응답이라는 키워드로 생각하면 된다.
블로킹은 제어권을 쥐고 있는 것. 동기는 응답기다리고 응답에 즉각 반응하는 것.
논블로킹은 제어권을 쥐고 있지 않는 것. 비동기는 응답과 상관없이 제 할 일을 하는 것.

블로킹 & 동기
작업이 순차대로 이루어진다.

논블로킹 & 동기
논블로킹은 제어권을 쥐고 있지않아서, 다른 작업도 함께 수행이 가능하지만 동기의 특성 때문에 다른 작업의 수행이 모두 끝났는지 계속 확인한다. 그리고 작업에서 결과 값이 나오면 거기에 즉각 반응한다.

블로킹 & 비동기
제어권을 가지고 있지만, 병과를 바로 처리하지않는다.

논블로킹 & 비동기
제어권을 쥐고 있지 않기 때문에 다중으로 작업이 일어날 수 있고, 비동기의 특성때문에 한 쪽 작업이 끝나고 결과값이 도출되도, 자신의 작업을 마치고 나서 반대쪽 작업을 진행한다.


자바는 기본적으로 블록킹+동기 방식으로 진행이된다.
(자바스크립트는 논블록킹+비동기 방식으로 알려져있다. )

자바에서 멀티쓰레드를 사용하면, 쓰레드들이 비동기적으로 동작한다.
@Async를 활용하여 비동기 쓰레드를 만들 수도 있다.

0개의 댓글