프로세스와 스레드의 차이점은?
운영체제의 최소 단위인 프로세스는 운영체제가 Code, Data, Stack, Heap 메모리 영역을 할당해준다. 스레드는 프로세스 내에서 Stack 메모리 영역을 제외한 다른 영역을 같은 프로세스 내에서 다른 스레드와 공유한다.프로세스가 다른 프로세스와 정보를 공유하기 위해서는 번거로운 과정을 거쳐야 하지만 스레드는 프로세스 안에서 메모리를 공유하는 구조이기 때문에 다른 스레드와 정보 공유가 용이하다.
다중 스레드
스레드 생명주기 : 스레드는 탄생하고 소멸될 때까지 생명주기를 가진다.
멀티태스킹은 컴퓨터에서 각각의 일을 전담하는 해당 프로그램들(여러 개의 프로세스(process))이 동시에 실행된다. 멀티태스킹을 위해 운영체제가 취하는 방식이 멀티프로세스 시스템이다.
멀티스레딩은 하나의 프로그램내에서 여러개의 일을 동시에 수행하는 것을 말한다. 하나의 프로그램이 동시에 여러 작업을 수행하는 것이 가능하고, 스레드간에 데이터의 공유가 가능하여 시스템을 효율적으로 사용할 수 있다. 또한, 인터넷 프로그램과 같이 여러 개의 태스크가 동시에 발생하는 작업을 처리하는데 유용하다.
메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부른다. 프로세스가 종료될때까지 계속 유지되는 영역이다.
메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이다. 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다.
초기화된 데이터(Initialized Data)와 초기화되지 않은 데이터(Uninitialized Data) 세그먼트로 구분되는 이유는 메모리 공간을 효율적으로 사용하기 위함이다.
메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있고, 프로그래머가 동적으로 사용하는 영역이다. 사용자에 의해 메모리 공간이 동적으로 할당되고 해제되며, 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.
java, c++과 같이 가비지 콜렉터(garbage collector)가 활동하는 경우에는 자동으로 반환되는 경우도 있다.
메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다. 지역변수, 매개변수, 복귀 번지 등이 저장되어 있는 프로그램이 자동으로 사용하는 임시 메모리이다. 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
다른 세그먼트들이 하위 영역으로부터 할당되지만 Stack 세그먼트는 상위 영역부터 할당된다.