부록: Additional Contents
1. 프로그램(Program) vs. 프로세스(Process) vs. 스레드(Thread)
이 세 가지 개념은 컴퓨터가 작업을 수행하는 방식을 이해하는 데 필수적입니다.
프로그램(Program):
정의: 특정 작업을 수행하기 위해 작성된 명령어들의 집합을 포함하는 실행 가능한 파일입니다.
위치: 디스크에 저장되어 있습니다.
특징: 수동으로 삭제하지 않는 한 수명이 무제한입니다.
예시: Chrome.exe, Notepad.exe, Powerpoint.exe 등.
프로세스(Process):
정의: 프로그램의 실행 중인 인스턴스입니다. 프로그램이 메모리에 로드되면 프로세스가 되어 활성 엔티티로 간주됩니다.
위치: 주 메모리(RAM)에 상주합니다.
특징: 수명이 제한적입니다. 각 프로세스는 독립적인 메모리 공간을 가집니다.
컨텍스트 스위칭: 다른 프로세스로 전환하려면 컨텍스트 스위칭이 필요하며, 이는 시간이 오래 걸립니다.
안정성: 한 프로세스가 비정상 종료되어도 다른 프로세스에 영향을 주지 않습니다.
확장성: 새로운 기능을 추가하거나 수정할 때 다른 프로세스에 영향을 주지 않습니다.
스레드(Thread):
정의: 프로세스의 가장 작은 실행 단위입니다. 프로세스 내에서 할당받은 자원을 이용하고 실제로 작업을 수행하는 주체(일꾼)입니다.
특징: 하나의 프로세스는 여러 개의 스레드를 가질 수 있습니다. 스레드들은 동일한 코드, 데이터, 힙(heap), 파일을 공유하지만, 각자의 레지스터와 스택(stack)을 가집니다.
컨텍스트 스위칭: 스레드 간 컨텍스트 스위칭은 매우 빠릅니다 (경량이기 때문).
응답성: 프로그램의 일부 스레드가 긴 작업을 수행해도 프로그램이 계속 수행될 수 있습니다.
경제성: 프로세스 내 자원과 메모리를 공유하여 자원 소모가 감소합니다.
단점: 여러 스레드가 공유 자원에 동시에 접근할 경우 동기화 문제가 발생할 수 있으며, 하나의 스레드에 문제가 발생하면 전체 프로세스가 종료될 수 있습니다.
2. 멀티태스킹(Multitasking) vs. 멀티프로세싱(Multiprocessing) vs. 멀티스레딩(Multithreading)
이들은 여러 작업을 동시에 처리하는 방식에 대한 개념입니다.
멀티태스킹(Multitasking):
정의: 단일 프로세서(CPU)가 여러 작업을 동시에 처리하는 것처럼 보이게 하는 방식입니다.
특징: CPU 및 메모리 등의 자원을 작업들이 공유합니다. 각 작업은 자신만의 메모리 공간을 가집니다. 작업을 전환하기 위해 컨텍스트 스위칭이 필요합니다.
장점: 여러 프로그램을 동시에 운영할 수 있습니다 (예: MS Word, Excel, Photoshop).
멀티프로세싱(Multiprocessing):
정의: 여러 프로세서(CPU)에서 단일 또는 다중 프로세스를 실행하는 방식입니다.
특징: 여러 프로세스가 병렬적으로 동시에 실행됩니다. 각 프로세스는 독립적인 메모리 공간을 가지므로 안정성이 높습니다.
장점: 병렬성을 통해 성능이 향상되며, 안정성(하나의 프로세스 문제가 다른 프로세스에 영향 없음)과 확장성이 좋습니다.
단점: 프로세스 간 컨텍스트 스위칭 오버헤드가 커서 성능 저하가 발생할 수 있습니다.
멀티스레딩(Multithreading):
정의: 하나의 프로세서가 여러 스레드를 동시에 실행하는 능력입니다. (주어진 하나의 프로세스에 대해) 여러 스레드가 동시에 실행되는 방식.
특징: 여러 스레드가 동일한 코드, 데이터, 파일을 공유하지만, 각자의 레지스터와 스택을 가집니다.
장점: 응답성이 좋고(일부 스레드가 긴 작업 수행 중에도 프로그램 지속), 자원 소모가 적습니다 (프로세스 내 자원 공유).
단점: 스레드 간 공유 자원 접근 시 동기화 문제가 발생할 수 있으며, 하나의 스레드 문제로 전체 프로세스가 종료될 수 있습니다. 디버깅이 어렵습니다.
3. 암달의 법칙(Amdahl's Law)
암달의 법칙은 병렬화를 통해 얻을 수 있는 이론적인 최대 성능 향상(Speed-up)을 예측하는 공식입니다.
Fraction time affected: 전체 실행 시간 중 병렬화의 영향을 받는 부분의 비율 (0과 1 사이 값).
Amount of improvement: 병렬화로 인해 빨라지는 정도 (예: 프로세서 수).
(K+A)/(K+B)
핵심: 이 공식은 아무리 프로세서 수를 늘려도 병렬화되지 않는 부분(Sequential Part) 때문에 전체 시스템 성능 향상에 한계가 있음을 보여줍니다. 병렬화되지 않는 부분의 비율이 작을수록 더 큰 속도 향상을 얻을 수 있습니다.