본문 바로가기
개발자 준비/운영체제

동기 vs 비동기

by osul_world 2022. 5. 25.
728x90

동기 vs 비동기

https://www.youtube.com/watch?v=U42qWURR6Gw

 

동기란?

쉽게 설명해서 일련의 순서나 규칙을 가지고 동작하는 것을 말한다.

 

다른 함수를 호출했을때 해당 함수가 종료될때까지 기존 함수는 동작을 멈추고 대기한다.

 

비동기란?

기다리지 않고 호출 후에도 자신의 작업을 수행한다.

 

다른 함수를 호출했을때 해당 함수가 종료될때까지 기다리지 않고 기존 함수는 자신의 다음 동작을 수행한다.

이후, 호출한 함수가 작업이 완료되면 callback을 통해 처리한다.

비동기의 문제점

//case1
funcA(){
	funcB();
	int a = 1; 
	print(a+2);
}

//case2
funcA(){
	int a = funcB(); 
	print(a); //funcB의 응답값을 이용해야한다..!
}

case1처럼 기존 함수의 다음 동작이 호출한 함수의 응답값과 무관하면 비동기로 처리하는게 훨씬 빠른 속도를 보장할 것이다.

하지만, case2처럼 호출한 함수의 응답값을 사용해야하는 경우엔 처리가 곤란할 것이다.

 

비동기 처리란?

바로 이럴 때 사용하는 게 비동기 처리 이다. 콜백 함수를 사용하여 코드의 흐름을 제한 하거나, 비동기로 작동하는 코드 사이에 동기 함수를 끼워넣어서 코드의 흐름을 조정 하는 등의 기법을 이용해 비동기 처리를 구현한다.

 

JS와 JAVA의 비동기

비동기를 구현하는 기법에는 여러가지가 있다. 이중에서 JS와 JAVA에서는 각각 어떻게 비동기를 구현하는지 알아보자.

 

JS: 비동기 처리소와 테스크 큐를 이용

자바스크립트는 싱글스레드 환경에서 비동기를 구현했다. 이게 조금 의아 할수있는데, 브라우저나 node에서 보유하고 있는 비동기 처리소테스크 큐를 이용해 비동기를 구현했다.

 

JAVA: 멀티 스레드를 이용

자바는 멀티 스레드를 이용해 비동기를 구현한다. (이 외에도 다양한 방법이 있긴하다.)

 

자바의 비동기 문제

자바처럼 멀티 스레드를 이용한 비동기 구현에는 동시성 문제가 따른다. 따라서 멀티 스레드 동시성 문제에 대응하기 위해서는 동기화가 필요하다.

 

동기화에 대한 글을 나중에 정리하고자 한다.

 

728x90