Block vs Non-Block & Sync vs Async

Panda·2022년 1월 26일
0

Dev

목록 보기
1/4

백엔드를 하다보면 병렬처리 작업이 많이 필요할때가 있기때문에

관련 자료들을 여러번 보았지만
동기 / 비동기 차이, 스레드 / 비동기의 차이점을 명확하게 이해하지 못했고

이해를 명확하게 하기 위해 한번 더 공부를 하였습니다.

Block vs Non-Block

제어권 반환의 차이

Block

Block은 제어권의 순서가 이런식으로 흘러간다.

Non-Block

Non-Block은 제어권만 반환을 하고 함수는 실행중이기 때문에 결과는 나중에 반환이 된다.

Sync vs Async

시간의 개념

Sync
일반적으로 우리가 생각하는 코드상의 동기는
함수 A -> 함수 B가 순차적으로 실행되는것

제어권 반환 시점과 결과값 시점이 일치한다.
이것이 동기 이다.

Async

함수 종료 시점이 다르든
제어권 반환과 결과값 전달의 시점이 다르든
시점이 다르면 비동기 이다.

Block과 Sync, Non-Block과 Async은 얼핏 보면 동일한 개념을 가지고 있는것 처럼 보이지만
Sync와 Async이 좀더 추상적인 개념을 가지고 있다.

ExecutorService thread pool = Executors.newCachedThreadPool();
Future<Long> futureTask = thread pool.submit(() -> factorial(number)); // 비동기/논블록킹

while(!futureTask.isDone()) { // 동기
	System.out.println(FutureTask is not finished yet…”);  // 비동기
}
Long result = futureTask.get(); // 동기/블록킹

threadpool.shutdown();

위 코드를 보았을때
코드의 부분적으로 보면 비동기, 동기, 비동기, 동기가 존재하는 모습이고
코드 전체를 보았을때는 동기 처럼 보이지만
프로젝트 전체를 보았을때는 위 코드가 실행중일때 다른 이벤트, view 로딩 등등이 실행이 되기때문에 비동기로도 볼수가 있다.

따라서
Block, Non-Block, Sync, Aync의 개념이 모든 상황에서 정확하게 구분지어 말로 설명할 수가 없는 개념이다.

비동기 개념이 저한테는 이론을 이해하기가 어렵기때문에 많은 공부가 필요해 보인다.

실은 공부하게 된 계기가
async await이 문법적으로 동기인데 내부적으로는 비동기가 돌아간다는것은 알고는 있지만
await이 반복적으로 쓰이게 되면 동기코드랑 무슨 차이가 있을까싶어서
동기 비동기를 다시 한번 공부를 하고싶었습니다.

코틀린의 Coroutine 같은 경우는 FSM방식으로 재귀호출을 반복해 구현이 된다는데
이것은 추후 자세히 알아볼 예정입니다.

Reference

https://www.youtube.com/watch?v=IdpkfygWIMk&list=LL5sWLyQc0tpSJfE6s-SYNMQ

profile
실력있는 개발자가 되보자!

0개의 댓글