프로세스와 스레드
자체적인 리소스와 커뮤니케이션 문제를 갖고 있는 독립적인 개별 회사
프로세스는 실행 중인 컴퓨터 프로그램의 인스턴스입니다.
여기에는 프로그램 코드와 현재 활동이 포함됩니다. 각 프로세스에는 별도의 메모리 주소 공간이 있습니다.
프로세스에는 파이프, 소켓 또는 공유 메모리와 같은 IPC(프로세스 간 통신)를 위한 특별한 메커니즘이 필요한 경우가 많습니다.
리소스 집약적: 새로운 프로세스를 생성하려면 별도의 메모리 공간과 기타 리소스를 할당해야 하므로 리소스 집약적입니다.
스레드는 OS에서 수행할 수 있는 가장 작은 처리 단위입니다.
프로세스의 구성 요소!
마치 회사 내의 여러 부서 또는 팀처럼 회사의 자원을 공유 + 각 부서마다 고유한 특정 작업이 있으며 서로 다른 프로젝트를 동시에 수행!
프로세스와 달리, 여러 스레드가 동일한 프로세스 내에 존재할 수 있으며 메모리와 같은 리소스를 공유할 수 있다!
부서는 서로 더 많이 연결되어 있지만 한 부서(스레드)의 문제는 같은 회사(프로세스) 내의 다른 부서에 더 쉽게 영향을 미칠 수 있습니다.
반면, 기업(프로세스)은 더욱 고립되어 있으므로 한 기업의 위기가 다른 기업에 직접적인 영향을 미치지 않습니다.
멀티 프로세스 & 멀티스레드
일반적으로 프로세스는 문제에 직면하더라도 다른 프로세스에 직접적인 영향을 미치지 않기 때문에 더 안전하고 안정적!
그러나 리소스 집약적일 수 있으며 프로세스 간의 통신 속도가 느려질 수 있습니다.
이러한 멀티 쓰레드를 통해 리소스를 효율적으로 사용하고 통신 속도를 높일 수 있다!
그러나 이는 한 스레드의 문제가 전체 프로세스에 영향을 미칠 수 있는 위험성이 있다. (잠재적으로 프로세스까지도)
면접 질문들
프로세스는 메모리 상에서 실행중인 프로그램을 말하며, 스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말한다.
프로세스는 최소 하나의 스레드를 보유하고 있으며, 각각 별도의 주소공간을 독립적으로 할당 받는다.(code, heap, stack)
스레드는 이중에 stack만 따로 할당받고 나머지 영역은 스레드끼리 서로 공유한다.
작업의 주체가 현재 Context를 잠시 중단하고 다른 Context를 실행하는 것을 Context Switching이라 한다.
즉, 멀티태스킹 운영 체제에서 시스템이 CPU를 한 프로세스(또는 스레드)
실행에서 다른 프로세스 실행으로 전환할 때 발생하는것!