프로세스와 스레드
프로세스는 무엇이고 스레드는 무엇인지 알아보려고 한다.
우선 정의부터 확인한다.
프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위.
스레드 : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.
윈도우 .exe 붙은 파일( 컴퓨터의 실행 파일. )들을 프로그램이라고 한다.
그리고 프로그램을 실행해서 돌아가고 있는 상태, 즉 컴퓨터가 어떤 일을 하고 있는 상태를 프로세스라고 한다.
옛날 컴퓨터들은 브라우저 읽는 작업, 파일을 다운로드 하는 작업 등의 컴퓨터가 프로세스 여러개를 함께 돌리는 일(멀티태스킹) 을 할 수 없었다.
여기서 멀티태스킹이란 하나의 운영체제 안에서 여러 프로세스가 실행되는 것을 의미한다.
우리가 여러 프로그램을 한번에 쓸 수 있는 이유는 운영체제가 여러 개의 프로세스를 함께 돌리고 있기 때문이다.
Ctrl + Alt + Delete 키를 누르고 작업관리자로 진입하여 현재 돌고 있는 프로세스들을 확인할 수 있다.
여러 프로세스들을 함께 돌리는 작업은 동시적, 병렬적, 또는 혼합으로 이루어진다.
동시성 이란, 프로세스 하나가 조금씩 돌면서 여러 작업을 돌아가면서 일부분씩 진행하는 것이다.
이 과정이 빠르게 돌아가니 사람들에게는 이 프로세스들이 동시에 진행되는 것처럼 느껴지는 것이다.
병렬성은 프로세스 하나에 코어 여러개가 달려 각각 동시에 작업들을 수행하는 것이다.
듀어얼코어, 쿼드코어, 옥타코어등 이 이를 말한다.
cpu 코어가 온도 문제로 발전하지 못하게 되자 코어를 여러개 달아서 작업을 분담할 수 있도록 만든 것이다.
컴퓨터가 여러개의 프로세스를 함께 돌릴 수 있게 되었다.브라우저가 일을 할 때 게임을 하며 노래를 듣고, 다른 페이지들을 돌아다닐 수 있어야 하고, 유튜브 영상의 데이터를 받아오면서 받은 데이터로 실행 할 수 있다.
한 프로세스 내에서도 동시에 진행될 필요가 있는 것이다.
이 갈래를 스레드라고 부른다.
프로세스는 요리사고, 대량주문이 들어오는 식당에서 끊임없이 만들어내는 메뉴 하나하나가 프로세스이다.
컴퓨터는 프로세스마다 자원을 분할해서 할당한다.
프로세스들은 컴퓨터의 자원을 분할하여 쓰지만 스레드는 프로세스마다 주어진 전체 자원을 함께 사용한다.
이게 속도와 효율 면에서는 낫겠지만 단점도 있다.
프로세스 안에서 공유되는 변수에 스레드 두개가 동시에 손을 대면 오류가 발생한다.
어떤 버튼을 누를때마다 숫자가 1씩 올라간다고 되어 있을 때, 스레드 둘이 이 버튼을 10번 누를 경우 결과물이 20이 나와야 하는데, 실제로는 7 등이 나오게 되는 것이다.
스레드 1과 2에서 동시에 버튼을 누르게 되면 1만 올라가기 때문이다.
프로세스와 스레드는 개념의 범위부터 다르다. 스레드는 프로세스 안에 포함되어 있기 때문이다.
운영체제가 프로세스에게 Code / Data / Stack / Heap 메모리 영역을 할당해 주고 최소 작업 단위로 삼는 반면, 스레드는 프로세스 내에서 Stack 메모리 영역을 제외한 같은 프로세스 내 다른 스레드와 공유한다.