프로세스와 스레드의 차이점이 뭘까요?
타임쉐어링을 공부한 것에 대해 이야기하다가 내가 멀티프로그래밍을 이용해서 프로세스는 하나씩 진행되지만 동시 진행되는것처럼 보여지는것이고 스레드는 실제로 병렬로 진행하는 것이다 라는 말에 멘토님의 질문...
프로세스는 프로그램 그 자체가 실행되는 것이고... 그 프로세스를 구성하는 하나하나의 동작들이 스레드인것 아닐까요..?
틀린 말은 아니지만 정확한 답도 아니라고 하시며 이 부분에 대해서 좀 더 정리를 해보길 추천 받아서 하는 공부... 시작!

프로세스란 지금 실행 중인 프로그램을 말하며 운영 체제에서 메모리 공간과 자원을 할당받아서 독립적으로 실행이 된다.
주소 공간 : 프로세스는 독립적인 메모리 주소 공간을 가짐
자원 : 프로세스는 CPU 시간, 메모리, 파일 등 자원을 할당
프로세스 제어 블록 PCB : OS는 프로세스에 대한 정보를 담고 있는 구조체를 유지해서 프로세스를 관리
독립적: 프로세스는 독립적으로 별개의 프로그램이기에 하나가 종료되거나 오류가 생겨도 다른 프로세스에는 영향이 없으며 다른 프로세스의 메모리에 접근할 수 없음
가볍지 않은 생성 : 프로세스 생성은 비용이 크고 시간이 오래 걸린다
프로세스의 내부에 있는 실행의 작은 단위로 한 프로세스에는 한개이상의 스레드가 있으며 프로세스에 할당된 자원들과 공간을 같이 활용해 스레드가 동작한다
스택 : 스레드는 독립적인 스택을 가지고 함수 호출, 지역 변수 등의 정보를 저장한다
레지스터 : 스레드는 독립적인 레지스터 값을 가지고 CPU에서 실행될 때 상태를 저장한다
자원 공유 : 한 프로세스에서 실행되는 스레드들은 메모리 공간과 자원을 공유해서 스레드 간에 상호작용이 쉽지만 동기화 문제가 발생할수 있다
가벼운 생성: 스레드는 프로세스 내에 가벼운 실행 단위이기에 생성과 컨텍스트 스위칭이 더 빠르고 효율적이다
프로세스는 독립적으로 자원과 메모리 공간을 부여 받은 프로그램으로 외부에 영향을 받지않지만 생성되기 어려우며
스레드는 독립적이지 않고 속한 프로세스의 자원들을 같은 프로세스에 있는 스레드들과 나눠 사용해야하고 영향을 주고 받을 수 있지만 가벼운 생성이 가능하다