✔ 메모리에 올라와 실행되고 있는 프로그램의 인스턴스.(독립적인 개체)
✔ 운영체제로 부터 시스템 자원을 할당받는 작업의 단위.
✔ 동적인 개념으로는 실행된 프로그램을 의미함.
✔ 어떤 작업을 실행할 수 있는 파일.
✔ 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태.
✔ 최소 1개의 스레드(메인 스레드)를 가지고 있다.
✔ 프로세스마다 각각 독립된 메모리 영역을 Code / Data / Stack / Heap 의 형식으로 할당받는다.
✔ 프로세스는 각각 독립된 메모리 영역을 할당받기 때문에 다른 프로세스의 변수나 자료에 접근 불가능.
✔ 프로세스 내에서 실행되는 여러 흐름의 단위.
✔ 프로세스의 특정한 수행 경로.
✔ 프로세스가 할당받은 자원을 이용하는 실행의 단위.
✔ 프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당 받는다.
✔ Code / Data / Heap 형식으로 할당받은 메모리 영역은 공유한다.
✔ 각각의 스레드는 별도의 Stack을 가지고 있지만 Heap 메모리는 서로 읽고 쓸 수 있다.
하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 것.
장점 :
하나의 프로세스에 문제가 생겨도 확산되지 않고 프로그램은 동작한다.
단점 :
각각 독립된 메모리 영역을 갖고 있어, 작업량이 많을수록 오버헤드가 발생한다.
Context Switching으로 인한 성능 저하.
✔ CPU에서 여러 프로세스를 돌아가며 작업을 처리하는 과정.
✔ 즉, 프로세스의 상태(Context) 정보를 보관하고 대기하고 있던 다음 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 과정.
✔ 너무 잦으면 오버헤드 발생.
프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하는 것.
장점 :
메모리 공유로 인한 시스템 자원 소모 감소, 처리 비용 감소, 실행 속도 향상.
단점 :
메모리 공간 공유로 인한 동기화 문제 발생.
하나의 스레드에 문제가 생기면 전체 프로세스에 문제가 생김.
주의 깊은 설계가 필요하고 디버깅이 까다로움.