보는 사람에 따라서 실행되는 하나의 프로그램을 의미하기도 하고 최소 작업 단위를 의미하기도 합니다. 후자의 경우 스레드와 프로세스 모두 Task가 될 수 있습니다.
저는 하나의 프로그램으로 이해하겠습니다. 이 말은 한 Task를 처리하는데 하나 이상의 프로세스가 필요하다는 의미입니다.
프로그램은 컴파일한 코드와 초기화 전역변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 정적인 개체입니다.
프로세스는 프로그램 카운터나 레지스터처럼 현재 어떤 자원을 사용하는지 관련 정보가 들어 있는 동 적인 개체이다.
프로그램과 관련된 모든 데이터가 메모리에 적재되어 연속적으로 실행 중인 상태를 말합니다. 따라서 운영체제로부터 자원을 할당받는 작업의 단위를 의미합니다. 여러개의 프로세스를 동시에 사용하여(Multi Process) 하나의 작업(Task)를 처리할 수도 있습니다.
스레드는 하나의 프로세스 보다 더 작은 작업 흐름의 단위를 가집니다. 한 프로세스는 최소 1개 이상의 스레드를 가집니다.
여러 스레드가 동시에 동작하여도 안전함을 보장한다는 의미입니다.
한 변수를 여러 스레드가 동시에 읽기/쓰기를 하여도 오류가 나지 않도록 동작한다는 의미입니다.
CPU가 여러 일을 완전하게 동시에 처리할 수는 없습니다. 여러 프로세스를 돌아가면서 처리하게 되는데 이 프로세스 전환 작업을 Context Switching이라고 합니다.
Multi Processing: 프로세서 하나 이상이 서로 협력하여 일을 처리하는 것입니다.
Multi Programming: 프로세서가 입출력 작업의 응답을 대기할 동안 다른 프로그램을 실행할 수 있도록 하는 것입니다.
Multi Tasking: 하나 이상의 프로그램이 프로세서 하나에서 운영체제의 스케쥴링에 따라 조금씩 번갈아가며 수행하는 것입니다. 정해진 시간동안 교대로 작업을 수행하는 것을 의미합니다.
Multi Thrad: 프로세스 하나에서 여러 개의 스레드를 동시에 실행하는 것입니다.