0. 시작하며
백엔드 개발의 성능 최적화 및 확장성을 기본적인 지식을 기록하기위해 글을 씁니다! 단일 ~ 멀티 프로세싱까지 간단하게 다루어보겠습니다!
각 단어의 정의는 다음과 같습니다.
- 프로그램 : 컴퓨터가 실행할 수 있는 명령어의 집합
- 프로세스 : 컴퓨터에서 실행중인 프로그램
- CPU : 명령어를 실행하는 연산 장치
- 메인 메모리 : CPU에서 실행되는 프로세스의 대기장소
- I/O(input/output) : 파일을 읽고 쓰거나 네트워크의 무언가와 데이터를 주고 받는 것
1. 단일 프로세스 시스템
단일 프로세스 시스템이란?
CPU에서 "한번에 하나의 프로그램"만 사용되는 시스템 형태를 말합니다. 아무래도 CPU에서 하나의 프로세스만 처리한다면 CPU 연산이 끝난뒤 I/O 작업이 발생한다면 CPU는 대기해야하는 단점이 존재하게됩니다.
이렇게 안좋은 CPU 사용률을 개선하기위해 등장한것이 "멀티 프로그래밍" 입니다.
2. 멀티 프로그래밍
멀티 프로그래밍이란?
CPU 사용률을 개선하기위해 번갈아가며 프로세스를 동작하는 시스템 형태를 말합니다. 이전 CPU 사용률은 어느정도 개선되었지만 어떤 프로세스의 동작 시간이 길어진다면 이후 프로세스는 계속해서 대기해야하는 문제점이 있습니다.
이에대한 해결책으로 등장한것은 "멀티 태스킹"입니다.
3. 멀티 태스킹
멀티 태스킹 이란?
한번에 아주 짧은 시간만 프로세스가 CPU사용하는 방법입니다. 프로세스의 응답시간을 최소화하는데 목적이 있습니다. 이를 통해 사용자는 여러 프로세스가 동시에 실행되는것처럼 느끼게 되었습니다.
하지만 이또한 다음과 같은 아쉬운점이 있었습니다....
- 하나의 프로세스가 동시에 여러 작업을 수행할 수 없었습니다.
- 그렇다고 여러 프로세스를 동시에 실행하는일은 비효율적입니다 ( 프로세스의 컨텍스트 스위칭 )
- 프로세스는 각각 독립된 메모리 영역을 갖기에 데이터 공유가 까다롭습니다
이러한 아쉬운점들은 "스레드"의 등장으로 해결될 수 있었습니다!
4. 스레드
스레드란?
프로세스내의 실행 단위입니다. 이로써 프로세스는 한 개 이상의 스레드를 가지게 되었습니다. 여러 스레드를 갖는 것은 "멀티 스레드 프로세스"라고 합니다. 스레드는 프로세스의 heap 메모리를 공유하게됩니다. 하지만 각 stack영역은 프로세스 내에서 독립적입니다.
스레드의 등장으로 인한 영향
- 하나의 프로세스가 동시에 여러작업을 수행할 수 있게되었습니다.
- 스레드는 heap메모리를 공유하므로 데이터 공유가 원활합니다.
- 같은 프로세스내 스레드 컨텍스트 스위칭은 가벼워 활용하기 좋습니다.
번외로 두개 이상의 프로세서나 코어를 활용하는 시스템은 "멀티 프로세싱" 이라고 합니다.
5. 마치며
정의와 흐름위주의 포스팅이었습니다. 다음엔 좀 더 구체적으로 정리해 오겠습니다!
'Computer Science' 카테고리의 다른 글
Array 와 Linked List (0) | 2024.09.06 |
---|