프로세서 = CPU
프로그램 = 작업 실행을 위한 파일
프로세스 = 컴퓨터가 실행중인 프로그램의 작업의 단위
쓰레드 = 프로세스 내 실행되는 흐름의 단위
멀티 프로세스란 하나의 응용프로그램을 여러개의 프로세스로 분리하여 실행하는 것을 의미한다.
부모와 자식 관계로 표현이 가능하다.
독립된 구조로 안정성에 목적을둔다 - 하나의 프로세스가 꺼져도 프로그램이 종료되지 않음.
초기의 컴퓨터는 단일 프로세스 시스템 이라고한다. 한번에 하나의 시스템만 작업 할 수 있어서
자원 활용이 비효율 적이었다.
이러한 문제를 해결하기 위한 여러개의 프로그램을 메모리상에 위치 시키고 CPU를 번갈아가며 사용하게 만들어 CPU의 효율을 높이는데에 목적이 있다.
즉 멀티 프로그래밍이란 것은 하나의 CPU에서 번갈아가며 동시에 실행시키고자 하는 수단과 방법이다.
이 과정에서 발전되어 멀티 태스킹이라는 원리를 첨가하여 더욱더 향상된 멀티 프로그래밍의 취지를 높였다.
멀티 태스킹 - 프로세스를 아주작은 단위로 번갈아가며 처리하여 작업 응답 방식 최소를 고려한 방식
여러개의 CPU 코어 가 동시에 작업을 처리하는것을 의미한다.
하나의 작업에 여러코어가 동시에 관여할수도 있고,
여러 작업에 여러 코어가 병렬적으로 상호작용 할수도 있다.
속도향상의 목적 - 여러 코어가 작업에 대한 병렬적 처리
기본적으로 프로세스가 실행되면 하나의 메인스래드가 생성되고 프로그램을 실행하게 된다.
멀티 스레드라는것은 하나의 프로세스에 둘 이상의 스레드가 동시에 작업을 수행하는것을 의미한다.
즉 멀티스레딩은 여러 코어에서 한 번에 여러 개의 스레드를 처리하는 CPU 성능을 활용하는 프로그래밍의 한 유형이고. 한 번에 하나가 아니라, 동시에 여러 개의 작업 또는 명령을 실행하다.
--쓰레드--

운영체제가 시스템의 자원을 효율적으로 사용하기위해 쓰레드를 사용한다.
멀티 프로세스보다 멀티 쓰레드를 사용하는 이유
프로세스간 자원의 공유가 쓰레드의 자원공유보다 어려워 자원활용효율이 떨어짐.
( 작업량이 많아진다면 문맥교환이 잦고, 오버헤드로 인한 성능저하 이슈)
그렇다고 쓰레드의 오버헤드가 적ㄴ?!
단 쓰레드는 자원공유의 동기화 문제를 주의해야함.
Q. 멀티 태스킹과 멀티 스레딩에 대해 비교해주세요.
멀티 쓰레딩은 스레드 간의 자원공유를 하며 프로그래밍이 가능하다.
반면 멀티 태스킹은 독립된 메모리 주소공간을 가지고 공유가 이루어 지지는 않는다.
단지 멀티 프로그래밍의 최적화를 위한 방법과 수단이라고 생각한다.
멀티 태스킹의 장점- 독립된 메모리 공간을 가지고 있기 때문에 독립수행이 가능함.