[Programming] 비동기 관련 용어에 대해서 — 1

gaeng2y
3 min readNov 20, 2022

--

안녕하세요! 갱입니다. 🫡

이번에 회사 프로젝트를 리팩토링을 진행하던 중 async/await를 적용하려고 했었습니다.

제가 동기/비동기에 대한 개념이 조금 부족하다는 것을 느끼고 찾아보며 이해하기 위해 포스팅을 작성해려고합니다…

우선 프로세스와 쓰레드부터 알아보도록 하죠!

Process 와 Thread

프로세스와 멀티 프로세싱

프로세스

프로세스는 위키백과에 따르면

컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.

-> OS로부터 시스템 자원을 할당받는 작업의 단위라고도 말할 수 있습니다.

이 프로세스들은 각각의 독립된 메모리 영역(코드, 데이터, 힙, 스택)을 각자 할당 받습니다.

프로세스끼리는 서로의 변수나 자료구조에 대해 절대 접근할 수 없음

프로세스 간에 자원 접근을 하려면, IPC를 사용해야 한다.

멀티 프로세스

하나의 프로그램을 여러 개의 프로세스로 구성하여, 각 프로세스마다 하나의 작업씩 처리하도록 하는 것입니다.

예를 들면 우리가 채팅 어플을 만들 때 메세지를 수신한다고 하면

  • 메세지 수신하는 프로세스
  • 수신한 메세지를 화면에 그려주는 프로세스
  • 알림을 울리는 프로세스

이런 식으로 여러 개의 작업을 프로세스를 여러 개 생성하여 각자 하나씩 처리하도록 해주는 것이다!

멀티 프로세스의 장점은, 프로세스는 독립된 메모리 영역을 각자 할당받기 때문에, 프로세스 간 서로의 자원을 침투할 수 없음.

따라서, 독립된 구조이기 때문에 안정성이 높다!

그렇다면 단점은 예로 설명하자면 우리가 메세지를 수신하면 받자마자 알림이 울리는게 동시에 진행되는 것처럼 보이지만, 실제로는 프로세스들을 빠르게 왔다 갔다하며 실행 중이다.

따라서, 프로세스를 왔다 갔다 하는 과정에서 Context Switching이 일어나는데, 프로세스는 메모리가 모두 독립적으로 존재하기 때문에, Context Switching 시 CPU의 부담도 커지고 오버헤드가 발생하게 된다.

또, 프로세스 간 자원 공유가 어렵다는 점도 또 하나의 단점이다.

쓰레드와 멀티 쓰레드

쓰레드

어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.

프로세스처럼 메모리 영역을 할당받지는 못한다.

이런 식으로 프로세스에 속하므로 메모리 영역에 코드, 데이터, 힙 영역을 공유하며 스택을 나눠쓴다.

스택 영역만 따로 가지는 이유는 스택이 LIFO 라서, 스택이 쌓이면 프로세스가 섞인 채로 순서대로 나와 흐름을 방해주기 떄문임)

멀티 쓰레드

하나의 프로그램을 여러 개의 쓰레드로 구성하여, 각 쓰레드마다 하나의 작씩 처리하도록 하는 것

많은 OS가 멀티 프로세싱을 지원하지만, 멀티 스레드를 기본으로 하고 있다.

그렇다면 멀티 스레드의 장점을 알아보자

  • 코드, 데이터, 힙 영역을 공유하기 때문에, Context Switching이 빠름
  • 생성/종료 시간도 프로세스보다 빠름
  • 통신 방법이 훨씬 간단함

단점은

설계가 까다롭다. 스택 영역 빼고 공유하기 때문에, 자원 공유의 문제가 생긴다

--

--