프로세스는 컴퓨터에서 실행 중인 하나의 프로그램을 의미
프로그램이 메모리에서 독립적으로 실행되기 위해 할당된 하나의 작업 단위
각 프로세스에 고유한 메모리 공간과 자원(CPU, 메모리, 파일 등)을 할당하며, 서로 간의 메모리를 공유하지 않으므로 독립적
코드(Code) 영역: 프로그램의 코드(명령어)가 저장되는 메모리 공간, 일반적으로 읽기 전용
데이터(Data) 영역: 전역 변수나 정적 변수가 저장되는 영역, 프로그램이 시작할 때 할당되며 종료될 때 해제
힙(Heap) 영역: 프로세스가 동적으로 할당한 메모리 공간이 위치하는 곳, 힙은 런타임 중에 메모리를 할당하고 해제할 수 있으며, 프로그래머가 직접 관리
스택(Stack) 영역: 함수 호출 시 할당되는 메모리 공간, 지역 변수와 함수 호출 정보를 저장, 스택은 함수 호출이 끝나면 자동으로 해제되는 구조
프로세스 내에서 실행되는 작업의 하위 단위
하나의 프로세스가 여러 개의 스레드를 가질 수 있음
프로세스 내의 메모리와 자원을 공유하기 때문에 스레드 간 통신이 빠름
같은 프로세스 내에서 공유 메모리에 접근할 수 있지만, 이를 동기화하지 않으면 경쟁 상태
공유 메모리: 같은 프로세스 내의 스레드는 코드, 데이터, 힙 영역을 공유, 동일한 전역 변수나 동적 메모리에 접근
독립 메모리: 각 스레드는 고유한 스택(Stack) 영역을 가짐, 스택에는 함수 호출 시 생성되는 지역 변수와 호출 정보가 저장
경쟁상태: 여러 스레드가 동시에 같은 자원(특히 메모리)에 접근하고 수정하려고 할 때 발생하는 문제 작업의 결과가 스레드의 실행 순서에 따라 달라질 수 있어, 예기치 못한 오류나 데이터 손상이 발생