본문 바로가기

CS/운영체제

동시성에 대해서(동기 vs 비동기)

개발을 하다보면 자주 마주치는 용어들 중 하나이다.

동기성이냐? 비동기성이냐?

 

나도 처음 개발을 할때 2개의 의미를 정확히 말로 설명할 수 없었다. (몸으로는 알고 있었지만)

지금도 정확히 이렇다라고 말하기가 어렵기에 정리를 해보자.

 

 

1. 동기성(synchronicity) 

 

하계 올림픽을 보다보면 싱크로나이즈 라는 종목이 있다. 

혹시 모르는 사람들을 위해 아래처럼 그림처럼 여러 사람이 물 속에서 합을 맞추는 종목이다.

싱크로나이즈

이와 같이 동기성이라는 말 자체에는 2개 이사의 서로 다른 something 가 있다는 의미이기도 하다.

그럼 프로그래밍 세계로 다시 넘어온다면 A라는 작업의 흐름이 있고 B라는 작업의 흐름이 있다고 가정하자.

여기서 동기성이란 A가 B에게 요청을 하면 B는 요청에 대한 결과값을 줄 것이다. 

이때 A의 작업은 B에게 보낸 요청의 결과값을 받고 다시 원래의 작업 흐름대로 가는 행위를 말한다. 

 

쉽게 예를 들자면,

식당에서 서버(A)가 요리사(B)에게 음식 오더를 한다.

서버는 요리사에게 요청을 한 것이고 요리사는 요청에 대한 결과값으로 음식을 만들어 줄 것이다. 

이때 서버는 요리사의 음식을 받고 나서야 다른 작업들을 수행한다. (동기성) 

 

동기성은 하나의 작업흐름에서 요청 후의 결과값이 돌아온다는 보장이 되어있기에 

다음 작업을 수행할때 결과값을 사용할 수 있다는 점이 특징이다. 

다만 결과값이 보장이 되어야하기에 결과값을 기다리는 동안 다음 작업을 수행하지 못한다는 점이 있다.

 

2. 비동기성(Asynchronicity)

 

위에서 예를 들었던 서버(A)가 요리사(B)에게 음식을 요청하고 음식을 기다리지 않고 다른 작업을 본다면 이건 비동기성이다.

비동기성의 작업은 요청에 대한 결과값이 다음 작업 수행에 영향을 미치지 않을 때 사용할 수 있을 것이다.

요리사가 음식을 다 만든 후에 종을 울려 다시 서버를 불러서 음식을 건내주는 행위가 비동기성에서 콜백(callback)이라는 행위이다.

 

서로 유기적으로 잘 움직인다면 음식점이 좀 더 효율적으로 움직일것이다. 이런 점이 비동기성의 장점이라고 본다.

하지만 동기성과 달리 작업의 흐름이 순차적이지 않기에 결과값의 순서보장이 되지 않으며 작업이 꼬이는 경우가 발생할 수 있다.

 

다음에는 동기/비동기와 같이 알아두어야할 블로킹/논블로킹에 대한 개념을 추가적으로 정리해보자.

 

그럼 20000

'CS > 운영체제' 카테고리의 다른 글

프로세스의 메모리 구조  (1) 2023.01.11
프로세스와 스레드의 차이  (0) 2023.01.09