즉, 실행되지 않은 파일! 실행되지 않은 코드 덩어리!
프로그램을 "실행"하면 컴퓨터 메모리에 올라가고 "동적" 상태로 바뀌어 "프로세스"가 된다.
근데 프로그램이 복잡해지면서 프로세스 하나만으로 프로그램을 실행하기 힘들어졌다.
-> 해결법 : 프로그램을 여러 프로세스로 처리하면 되지 않을까?
이 방법은 불가능하다! Because) 운영체제는 안정성을 위해 프로세스마다 자신에게 할당된 메모리 내 정보에만 접근이 가능하며 다른 프로세스의 정보에는 접근이 불가능하다.
=> 데이터 접근이 가능한 프로세스보다 더 작은 단위가 필요한데? = "쓰레드"
쓰레드 = 프로세스 내 실행 단위
위 그림은 쓰레드의 메모리 영역을 나타낸 것이다. 위 그림처럼 쓰레드는 프로세스 내에서 Stack만 따로 할당받고 Code,Data,Heap 영역을 공유할 수 있다.
반면 프로세스는 각각의 프로세스마다 Code, Data, Heap, Stack 메모리 영역을 독립적으로 가지고 있다.
그렇다고 아예 접근할 수 없는 건 아닌데 프로세스 간 통신을 이용하면 된다. (ex. 파이프, 파일, 소켓 등등 )
참고자료 : https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html