우리의 컴퓨터에서 실행할 수 있는 파일, 윈도우의 경우 이름 뒤쪽에 .exe 붙어있는 그런 파일들을 '프로그램'이라고 한다. 그리고 그 프로그램이 실행되서 돌아가고 있는 상태, 즉 컴퓨터가 어떤 일을 하고 있는 상태를 바로 '프로세스' 라고 한다.
오늘날 처럼 쾌적하게 컴퓨터를 사용할 수 있는건 운영체제가 여러 개의 프로세스를 함께 돌리고 있기 때문!

Ctrl + Alt + Del 키를 누르고 작업관리자로 들어가서 내 컴퓨터에 얼마나 많은 프로세스들이 지금도 열심히 일을 하고 있는지 확인 해볼 수 있다.
여러 프로세스를 함께 돌리는 작업은 동시적, 병렬적 또는 이 둘의 혼합으로 이루어진다.
동시성은 프로세서 하나가 이거 조금 하고 저거 조금 하고 또 이거 조금 하고 이렇게 여러 작업을 돌아가면서 일부분씩 진행 하는것. 이렇게 진행중인 작업을 바꾸는 걸 Context Switching이라고 하는데 여기에도 다양한 방식과 알고리즘이 쓰임. 이 과정이 굉장히 빨리 돌아가니까 사람에게는 이 프로세스들이 마치 동시에 진행되는 것처럼 느껴진다.
병렬성은 코어 여러 개가 달려서 각각 동시에 작업들을 수행한다. 듀얼코어, 쿼드코어, 옥타코어 이런 명칭이 붙는 멀티코어 프로세서가 달린 컴퓨터에서 할 수 있는 방식.
CPU의 속도가 발열 등 물리적 제약 때문에 예전만큼 빠르게 발전하지 못하자 그 대안으로 코어를 여러개 달아서 작업을 분담할 수 있도록 만들었다.
브라우저도 하나의 프로그램이고 이게 돌면서 하나의 프로세스가 진행되고 있다.
그런데 브라우저가 일을 할 때도 게임을 다운 받는 동시에 다른 페이지를 돌아다닐 수 있어야 하고, 유튜브 영상의 데이터를 받아오면서 받아진 데이터로 영상을 실행할 수도 있어야 한다.
한 프로세스 내에서도 여러 갈래의 작업들이 동시에 진행될 필요가 있는것!
이 갈래는 바로 '스레드'라고 부른다.
스레드의 단점은 여러 스레드가 공유 자원에 접근할 때 데이터 충돌이 발생할 수 있고, 병렬 실행으로 인해 오류 추적이 어렵다.
비유를 하자면 '프로세서'는 요리사고, 대량주문이 들어오는 이 식당에서 끊임없이 만들어내는 요리메뉴들 하나 하나가 '프로세스'다.
각 주문(프로세스)은 독립적으로 만들어지며 자기만의 재료와 도구를 사용한다.
'스레드'는 요리 준비 단계로 요리사가 주문을 처리하기 위해 여러 단계를 나눠 처리하는 것(예: 재료 다듬기, 요리하기, 플레이팅).
스레드들은 같은 프로세스(요리 주문)에 속하고 같은 재료와 도구(메모리)를 공유한다.
필수영상을 보며 느끼고 있는데, 확실히 비유를 하며 설명을 들을 때 더욱 이해가 잘되고 기억에 오래 남는다. 설명을 잘하는 사람들은 비유를 잘 들면서 예시를 설명해주는것 같다. 강사 선생님도 비유를 해주시며 설명을 해주시는데 이해를 잘 못하는 내게 너무 좋은 설명이다..ㅎ