현업에서 개발자로 있다보면
어렴풋이 별개의 것으로는 인지하고는 있지만
무엇이 정확히 어떻게 다른지 모르는 부분이 있는데
프로세스 (Process)
쓰레드 (Thread)
트랜잭션 (Transcation) 등이 있을 것이다
더 나아가면 뮤텍스 (Mutex)나 서비스 (Service)도 있다
어느 정도 경력이 있는 개발자라고 한다면
아니 경력 개발자가 그것도 모르냐고 하는 사람도 있을 것이다
하지만 본인은 그것을 모르고 사용하였고 명확하게 구분지어 설명할 수 없었다
그래서 조금 시간을 들여 이 글을 꾸준히 작성할 예정이며
확실하게 짚고 넘어갈 수 있는 계기가 될 수 있기를 바란다
프로세스(process)는
컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.
스케줄링의 대상이 되는 작업(task)과 거의 같은 의미로 쓰인다.
여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며
동시에 여러 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다.
작업관리자에서 보면 제일 먼저 나타나는 것이 바로 프로세스이다
응용 프로그램을 개발할 때 다른 응용프로그램을 호출하여
작업을 하는 경우가 종종 발생한다
대표적인 예시가 바로 엑셀을 사용하다 에러가 나는 경우이다
엑셀을 사용하던 중 예상치 못한 에러로 프로그램이 중단 될 경우
백그라운드에 프로세스가 남아 있어 열리지 않거나
접근할 수 없는 상황이 발생하곤 하는데
이 때 강제로 종료하는 방식을 Process Kill 이라 한다
프로그램은 일반적으로 실행코드를 뜻하고,
프로세스는 메모리 상에서 실행되는 작업 단위를 지칭한다.
디스패치(dispatch)
준비 리스트의 맨 앞에 있던 프로세스가 CPU를 점유하게 되는 것
즉 준비 상태에서 실행 상태로 바뀌는 것을 디스패치라고 한다
보류(block)
실행 상태의 프로세스가 허가된 시간을 다 쓰기 전에
입출력 동작이 필요한 경우 CPU를 스스로 반납하는 것을 보류라고 한다
깨움(wakeup)
입출력 작업 종료 등 기다리던 사건이 일어났을 때
보류 상태에서 준비 상태로 넘어가는 과정을 깨움이라고 한다
시간제한(timeout)
운영체제는 프로세스가 프로세서를 계속 독점해서
사용하지 못하게 하기 위해 clock interrupt를 두어서
프로세스가 일정 시간동안만 (시분할 시스템의 time slice)
프로세서를 점유할 수 있게 한다
멀티 프로세싱 | 멀티 쓰레딩 | |
---|---|---|
하나의 응용 프로그램을 여러 개의 프로세스로 구성 | 하나의 응용 프로그램을 여러 개의 쓰레드로 구성 | |
장점 | 프로세스 중 하나가 죽어도 다른 영향이 확산되지 않는다 | 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다 프로세스간의 통신보다 통신 비용이 적다 Context Switching이 빠르다 Stack 영역을 제외한 모든 메모리를 공유하여 통신 부담이 적다 |
단점 | Context Switching 오버헤딩이 발생한다 Context Switching가 발생하면 캐쉬를 모두 리셋하고 다시 불러와야 한다 프로세스들 사이의 변수를 공유할 수 없다 | 미묘한 시간, 잘못된 변수 공유로 오류 발생 확률이 증가한다 디버깅이 까다롭다 단일 프로세스에서는 효과를 기대하기 어렵다 자원 공유의 문제가 발생한다 하나의 쓰레드에 문제가 발생하면 전체 프로세스가 양향을 받는다 |
[데이터 영역,힙,스택]영역 모두를 비공유
[데이터 영역,힙,스택]영역 중 스택 영역만 비공유