티스토리 뷰

개념

  • 프로그램은 어떤 파일이 실행되기 전 상태, 다시 말하면 코드 모음입니다.
  • 이것을 개발자의 언어로 이야기하면 코드가 파일로 빌드되어 보조 기억 장치에 저장되어 있는 정적인 상태 라고 할 수 있습니다.

 

  • 그리고 프로세스프로그램이 실행되고 있는 상태를 의미합니다.
  • 프로그램이 메모리에 올라와서 CPU가 코드를 해석하는 과정인 것이죠!
  • CPU는 한 번에 하나의 프로그램만 실행할 수가 있습니다. 그런데 작업관리자를 확인해보면 동시에 여러개의 프로그램이 실행되고 있는 것처럼 보이네요! 이것은 어떻게 설명할 수 있을까요??

 

여러개의 프로그램을 동시에 실행하는 방법

병렬 처리

  • 병렬 처리는 2개 이상의 코어가 각기 다른 프로세스를 같은 순간에 실행하는 방법입니다.
  • 듀얼코어, 쿼드코어가 여기서 나오는 개념인 거죠!

병렬 처리의 한계

  • 위 작업관리자 이미지를 보면 수십개의 프로세스가 존재하는 것을 볼 수 있습니다. 하나의 CPU는 하나의 프로세스만 담당할 수 있으니, 우리는 수십개의 코어를 가지고 있는 걸까요?
  • 하드웨어적인 한계로 인해 우리는 코어를 그렇게 많이 가질 수가 없습니다.
  • 이러한 한계로 인해 등장한 것이 병행 처리(동시성) 방법입니다.

 

병행 처리(동시성)

  • 동시성은 하나의 코어가 여러 프로세스를 돌아가면서 조금씩 처리하는 것을 의미합니다.
  • '동시' 라는 의미가 실제로 동시간이라는 게 아니라 동시에 일어나는 것처럼 보이는 것이라고 이해하면 좋습니다.
  • A작업을 5% 진행하고, B작업을 5% 진행하고, C작업을 5% 진행하고 다시 A작업을 10%까지 진행하는 것을 매우 빠르게 한다면 A, B, C 작업이 동시에 진행되는 것처럼 보일 수 있는 것이죠!

  • 이처럼 각 작업들을 짧은 텀을 두고 빠르게 번갈아 바꾸는 것을 컨텍스트 스위칭(Context Switching)이라고 합니다.

 

스레드(Thread)

  • 우리는 유튜브 동영상을 시청하면서 다른 영상을 검색할 수도 있습니다. 또 크롬 브라우저의 탭을 여러 개 띄움으로써 네이버도 켜고 구글도 켤 수 있죠.
  • 이처럼 하나의 프로세스 안에서 동시에 진행되는 작업들을 쓰레드라고 합니다.
  • 일반적으로 하나의 프로세스는 하나 이상의 스레드를 갖게 됩니다.

 

프로세스와 스레드의 차이

  • 프로세스는 코드, 데이터, 힙, 스택이라는 4가지 영역을 갖고 있는데요.
  • 프로세스가 하나 실행될 때마다 메모리에 각자의 코드, 데이터, 힙, 스택을 할당 받아서 올리게 됩니다.

  • 반면에 스레드는 코드, 데이터, 힙 영역을 공통된 자원으로 사용을 합니다.
  • 각각의 스레드는 스택 영역만 따로 가지고 있는 것이므로 프로세스보다 컨텍스트 스위칭 비용이 적고 더 빠른 것입니다!

 

멀티 프로세스, 멀티 스레드

  • 멀티 프로세스와 멀티 스레드는 하나의 어플리케이션에 대한 처리 방식의 일종입니다.
  • 단순히 프로그램을 여러 개 동시에 실행하는 것이 멀티 프로세스가 아니라 언제 어느 때에 어떤 방식으로 처리하느냐에 따르는 것입니다.

  • 부모 프로세스와 자식 프로세스는 고유한 PID(Process ID)를 가지고 독립적인 메모리 공간을 가지고 있습니다.
  • 대표적으로 브라우저의 탭 을 들 수 있습니다.
  • 예전에는 인터넷 창을 여러 개 켜두었을 때 하나의 창에서 오류가 발생하면 모든 인터넷 창이 꺼지는 경우가 있었습니다.
  • 그러나 크롬 브라우저는 하나의 탭에서 오류가 발생해도 다른 탭은 여전히 사용할 수가 있죠.
  • 이것은 크롬 브라우저가 탭을 멀티 프로세스로 관리하기 때문입니다. 각각의 탭이 고유한 메모리 공간을 사용하고 있으므로 서로 영향을 덜 받는 것입니다.

 

주요 차이점

  • 멀티 프로세스는 위 예시와 같이 다른 프로세스와 격리되어 있기 때문에 안정성이 높습니다.
  • 반면에 컨텍스트 스위칭 비용이 높고 프로세스간 자원 공유가 필요할 경우에는 IPC라고 하는 통신 기법을 사용해야 합니다.
  • 멀티 스레드는 코드, 데이터, 힙 영역을 공용으로 사용하므로 프로세스보다 가볍고 컨텍스트 스위칭 비용이 적습니다. 그리고 그만큼 빠른 응답시간이 보장되죠!
  • 그러나 기본적으로 멀티 스레드는 다른 스레드의 영향을 많이 받기 때문에 안정성이 떨어지고 자원을 공유하는 만큼 해당 자원을 모든 스레드가 같은 데이터로 읽어야 하므로 동기화 작업이 필수적입니다.

참고 자료

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함