[OS] 동기 vs 비동기

yongkini ·2021년 9월 22일
0

Operating System

목록 보기
2/5

동기(synchronous) vs 비동기(asynchronous)

: 사실 개발일을 할 때 동기와 비동기적 개념을 이용한 구현을 할 때 애를 먹었던 기억이 있는데, 예를 들어, 싱글 쓰레드 언어인 자바스크립트로 멀티 쓰레드 구현을 해야할 때가 생각이 난다. async, await를 이용해서 비동기적 프로그래밍을 했던 기억도 있고, 어쨌든! 이번 포스팅에서는 동기와 비동기에 대해서 알아보고자 한다.

  • 동기(synchronous) : 특정 작업이 끝날 때까지 다음 작업을 할 수 없는(blocking) 것이 필수이면 동기라고 한다. 항상 이 부분을 설명할 때 드는 예시로 집안일을 생각해보면, 빨래, 청소, 밥하기가 오늘의 할일이라고 했을때, 빨래를 먼저하고, 빨래가 끝날 때까지 빨래에만 집중하다가 끝나면 청소를 하고, 그다음에 밥을 하면 동기적으로 일을 했다고 할 수 있다. 하나의 업무가 끝나기 전에 다음 업무를 하지 않았으므로, 이러한 동기적 업무는 예를 들어 빨래가 시간을 너무 오래 잡아먹는다면(?) 그 다음 업무인 청소, 밥하기는 그만큼 지연되는 문제점을 가진다. html 파싱을 예로 들면, 위에서부터 하나하나 컴파일하며 내려오는데, js나 css 코드를 만나면 비동기적으로 처리하지 않고, 동기적으로 html 파싱을 멈추고 해당 코드를 실행하게 되는 것이 동기적 처리이다.
  • 비동기(asynchronous) : 특정 작업이 끝날 때까지 기다려야 다음 작업을 할 수 있는 동기와는 달리 비동기는 동시에 여러개를 진행하는 것을 말한다. 이전에 프로세스에서 말했던(멀티 프로세스) context switching을 통해 여러 일을 동시에 하는 그런 것이 아니라 실제로 하나의 작업이 진행됨과 동시에 다른 일을 진행하는 것이다(오히려 멀티 코어 방식과 같다). 다시 집안일을 예로 들면, 빨래, 청소, 밥하기를 동시에 진행하는 것이다. 빨래를 돌리면서 밥을 하고, 밥을 하면서 로봇 청소기로 청소를 하는식을 생각해보면 된다. 이러한 비동기 처리는 여러일을 동시에 하기 때문에 꼭 이전 일이 끝나야 다음일을 할 수 있는(blocking) 것이 아니다(필수가 아니다). 따라서, 하나의 프로세스가 진행되고 있는 도중에 다른 프로세스를 실행해도 그것을 막지 않는다.
  • 부연하자면, 동기는 이전 프로세스가 특정한 결과값을 반환해야 다음 프로세스로 넘어갈 수 있다면, 비동기는 결과값이 준비가되면 나중에 전달받도록 냅두고, 다음 프로세스를 바로 진행하는 형태라고 할 수 있다.
profile
완벽함 보다는 최선의 결과를 위해 끊임없이 노력하는 개발자

0개의 댓글