프로세스와 스레드
프로세스와 스레드
멀티 태스킹
- 단일 CPU에서 동시에 여러 작업을 수행하는 것을 의미
- 소프트웨어 기반으로 CPU 시간을 분할하여 각 작업해 할당
CPU에서 어떤 프로그램이 얼마만큼 실행 될지는 운영체제가 결정하는데 이를 스케줄링 이라고 합니다.
멀티 프로세싱
- 여러 CPU가 물리적으로 동시에 작업을 처리하는 것을 의미
- 하드웨어 기반으로 성능을 향상
프로세스
- 실행 중인 프로그램의 인스턴스
- 각 프로세스는 독립적인 메모리 공간을 가짐
프로세스의 메모리 구성
- 코드 섹션: 실행할 프로그램의 코드가 저장되는 부분
- 데이터 섹션: 전역 변수 및 정적 변수가 저장되는 부분 (기타 부분)
- 힙(Heap): 동적으로 할당되는 메모리 영역
- 스택(Stack): 메서드 호출 시 생성되는 지역 변수와 반환 주소가 저장되는 영역 (스레드에 포함)
프로세서는 CPU를 의미합니다.
스레드(Thread)
- 프로세스 내에서 실행되는 작은 단위
- 실제 CPU에 의해 실행되는 단위
스레드의 메모리 구성
- 공유 메모리: 같은 프로세스의 내의 자원을 공유
- 개별 스택: 각 스레드는 자신의 스택을 가짐
스케줄링
- CPU가 실행할 스레드를 배분하는 방법
컨텍스트 스위칭
- 멀티 태스킹 과정에서 다른 스레드를 실행하기 전에 CPU에서 사용하던 값들을 메모리에 저장해 두고 다시 실행할 때 불러오는 과정
CPU 바운드 작업 vs I/O 바운드 작업
- CPU 바운드 작업
- CPU 연산 능력을 많이 요구하는 작업을 의미
- 주로 계산, 데이터 처리, 알고리즘 실행 등
- 스레드 생성
- CPU + 1개
- 거의 100% 사용하므로 최적화
- I/O 바운드 작업
- 디스크, 네트워크, 파일 시스템 등과 같은 입출력(I/O) 작업을 많이 요구하는 작업을 의미
- I/O 작업 동안에는 CPU를 사용하지 않고 I/O 작업이 완료 될 때 까지 대기함
- 스레드 생성
- CPU 코어 수 보다 많이 생성
- 너무 많이 생성하면 컨텍스트 스위칭 비용이 증가
- 성능 테스트를 통해 적절한 스레드 개수를 찾는 것이 중요
웹 애플리케이션은 주로 I/O 작업이 많습니다.
참고
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.






