Q. 프로세스와 쓰레드의 차이에 대해서 말해주세요
저장장치 내에 저장되어 있지만, 메모리에는 올라가 있지 않은 정적인 상태
프로그램이 실행되고 있는 상태
즉 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해 준 동적인 상태
프로세스 실행 흐름의 일부
프로그램 하나가 단순히 하나의 일을 하지 않는다.
하나의 프로그램에서 음악을 들으면서 게시물을 작성하면서 검색을 할 수 있다고 해보자.
이때 하나의 프로그램에서 위와 같은 여러개의 일을 하기 위해선 여러 프로세스가 필요하다. 하지만 운영체제는 안정성을 위해서 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약을 두고 있고, 이를 벗어나는 정보에 접근하려면 오류가 발생한다. 그렇기 때문에 프로세스 하위에 더 작은 실행 개념이 필요하게 되었고 그 개념을 쓰레드라고 한다. 쓰레드는 프로세스 특성의 한계를 해결하기 위해 만들어진 개념이다.
쓰레드는 쓰레드 간 메모리를 공유하며 작동한다. 프로세스 내 쓰레드들끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 된다.
쓰레드를 코드에 비유하면 선언된 함수들이다. Application 관점에서 main() 함수에서 나열된 구문을 모두 해석하여 수행하면 하나의 thread가 수행된것 이다. 나열 된 구문 중 thread를 fork하는 api가 호출된다면, 기존의 thread는 흘러가고 동시에 또 다른 thread가 만들어져서 2개의 thread가 흘러간다.
프로세스는 각각 독립된 메모리 영역을 Code,Data,Stack,Heap 영역의 형식으로 할당해준다. 이렇게 독립된 메모리 영역을 할당해주기 때문에 각 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다. -> 프로세스끼리는 메모리내 자원 공유 안된다.
thread는 프로세스 내에 있기 때문에 thread끼리 자원공유 가능. 한 프로세스 안에 여러개의 thread가 자원을 공유한다. -> 프로세스의 한계를 해결하기위해 만들어진 개념
thread들은 stack은 독립적으로 할당받지만 code,data,heap은 공유자원으로 공유한다.
한 process를 강제 종료 시킨다고 다른 프로세스에게 영향을 주지 않는다. -> 자원공유를 하지 않으니까!
하지만 쓰레드의 경우 한 메모리 영역을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다. -> 자원을 공유하니까!
운영체제의 입장에서는 프로세스가 최소 작업 단위
멀티태스킹이란 하나의 운영체제 안에서 여러 프로세스가 실행되는것. -> 인터넷도 하고 비쥬얼 스튜디오도 켜고 카카오톡도 켜고 ~
하지만 동시에 실행되는 것 처럼 보이지만 그건 아니다.
멀티스레드는 하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에
처리하는 것 -> 카카오톡 하나의 프로세스가 실행될 때 그 안에 여러개의 멀티쓰레드를 통해 여러개의 작업을 동시에 수행할 수 있다.