본문 바로가기
Computer Science

[CS] 동기와 비동기의 개념 차이

by DuncanKim 2022. 7. 5.
728x90

[CS] 동기와 비동기의 개념 차이

 

우리는 이 개념어를 처음 들어보았을 수 있다. 하지만, 이 개념은 우리 일상속에 깊숙히 자리하고 있다.

 

평일 동안 열심히 일을 하거나 학교를 다니거나, 열심히 학원을 다니거나 해서 집안일에 소홀해져 집안이 엉망이 되었다고 하자. 주말을 맞이해서 우리는 집안을 원래대로 복구시켜 놓아야 한다. 밀린 빨래부터 널부러져 있는 옷가지, 수북히 쌓인 설거지 더미, 버리지 않아 초파리가 하나 둘 씩 생겨가고 있는 음식물 쓰레기 봉투, 방바닥에 널린 머리카락... 생각만 해도 3시간은 치워야 할 것 같다.

 

집안일은 어려운 것이 아니라 귀찮은 것이다. 그렇다면 귀찮은 일은 후딱 해치우고 다른 여가생활을 즐겨야 하지 않겠는가.

 

그럼 집안일을 시작해보자.

 

집안일을 빨리하고자 하는 사람은 다음과 같은 프로세스를 진행한다.

 

세탁기를 돌림과 동시에 할 수 있는 일들을 처리한다.

 

 

 

반면, 빨리 끝낼 생각이 없는 사람은 다음과 같은 프로세스를 진행한다.

 

 

세탁기를 돌리고 나서 꼭 빨래를 널어야 하는 사람이 있다. 그 사이에는 유튜브 또는 인스타그램을 하면서 누워있을 것이다.

 

 

이와 같은 것이 컴퓨터 세계에서도 활용이 된다.

서버의 작동방식, CPU의 프로세싱 방식, 자바스크립트의 콜백함수 등등 여러 군데에서 이 방식이 활용되는 것이다.

 

코드가 작성된 순서로 실행되는 것은 동기 방식이라고 볼 수 있다.

CPU 안에서 쓰레드, 프로세스가 여러 개 돌고 있는 것은 비동기 방식이라고 볼 수 있다.

만약 CPU가 비동기 방식을 지원하지 않는다면 우리는 하나의 OS 안에서 작업을 하는 것까지 굉장히 오래 걸릴 것이다.

또한 유튜브를 틀어놓고 블로그에 글을 쓰는 것과 같은 작업을 하지 못할 것이다.

 

자바스크립트의 경우 이벤트 루프가 비동기적으로 작동하게 만들어주는 역할을 한다.

 

setTimeout 함수가 대표적인 예시인데, 한 번 보자.

 

console.log("Hello");

setTimeout(() => {
  console.log("James");
}, 1000);

console.log("World");

/*출력
Hello
World
James
*/

다음의 코드가 동기적이라고 한다면 Hello를 출력하고, 1초를 기다린 후 James를 출력하고 다시 World가 출력된다.

하지만, setTimeout 함수는 비동기적 작업을 수행하므로, 즉시 실행되고 종료되며, 실행된 내용이 버려진다. 그렇기 때문에 그 다음에 있는 World가 출력이 바로 되고나서 1초 후에 James가 출력되는 것이다.

 

728x90

댓글