일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 프로그래머스
- spring security
- java
- 붕대 감기 자바
- continue 사용법
- 붕대 감기
- hackerrank
- 자바의정석
- contiune
- 혼공얄코
- 오블완
- 티스토리챌린지
- break 사용법
- 객체지향
- 다형성
- 멀티프로세싱
- 오버로딩
- 쿠키
- 오버라이딩
- 리눅스
- 입출력
- spring security 설정
- 멀티태스킹
- 중첩 break
- 캡슐화
- over()
- SQL Mapper
- 프로그래머스 붕대 감기
- 자바의 정석
- CPU
- Today
- Total
쉽게 쉽게
멀티태스킹, 멀티프로세싱, 멀티스레딩 본문
공부한 개발 관련 지식을 정리하며 쓴 글입니다.
CPU는 어떻게 코어 수보다 많은 작업을 수행할 수 있는 것일까?
2 코어면 2개의 작업만 수행하고 있어야 하는 것 아닌가?
이 의문을 해소하고자 멀티태스킹, 멀티프로세싱, 멀티스레딩에 대해 알아봤다.
1. 프로세스와 스레드
멀티태스킹, 멀티프로세싱, 멀티스레딩을 알기 위해서는 프로세스와 스레드를 알아야 한다.
프로세스란
프로세스란 실행 중인 프로그램을 의미한다.(메인메모리에 올라와 실행되고 있는 상태)
프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다.
이런 프로세스는 프로그램을 수행하는 데 필요한 데이터, 메모리 등의 자원 그리고 스레드로 구성되어 있다.
OS에서 실행 중인 하나의 애플리케이션 즉 ctrl + alt + del창 작업 관리자에서 프로세스 탭에 올라와 있는 애플리케이션 하나를 하나의 프로세스라고 부른다. ex) Chrome
만약 우리가 크롬창을 더블클릭 누른다면(실행) 운영체제로부터 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는 것이 프로세스이다.
크롬을 2개 띄웠다면 두 개의 프로세스가 생성된 것이다.
스레드란
프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 스레드이다.
프로그램 코드를 한 줄씩 실행하는 것이 스레드의 역할이다(=실행제어)
한 프로그램에 여러 개의 스레드가 존재할 수 있다.
스레드가 작업을 수행하는데 개별적인 메모리 공간(호출스택)을 필요로 하기 때문에 프로세스의 메모리 한계에 따라 생성할 수 있는 스레드의 수가 결정된다.
스레드가 1개라면 단일스레드, 2개 이상이라면 다중스레드이다.
2. 멀티프로세싱이란
하나의 *프로세서(CPU, 코어)는 한 번에 프로세스 1개밖에 실행시키지 못한다.
즉 여러 개의 프로세스를 처리하는 방법이 필요하다.
예를 들어 점원이 2명인(2 코어) 햄버거 가게에 불고기버거, 치킨버거, 새우버거, 치즈버거 주문이 들어오면(각각의 버거를 하나의 프로세스라 가정, 4개의 프로세스) 이를 해결하기 위한 방법이 크게 두 가지가 있다.
프로세서란?
프로세스와 프로세서의 차이
Processor (프로세서)는 하드웨어적인 측면에서 "컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛"이다. 이는 중앙처리장치(Central Processing Unit)를 뜻한다.
반면 프로세스는 특정 목적을 수행하기 위해 나열된 작업의 목록, 즉 프로그램이다.
작업의 과정이 파일로 저장되어 있으면 그것을 "프로그램"이라고 부르고 메모리에 적재되어 실행 중 이거나 실행 대기 중일 땐 "프로세스"라고 구별하여 부른다.
즉 프로세스는 "메모리에 적재되어 프로세서에 의해 실행 중인 프로그램"이라고 정의한다.
(1) 병렬 처리 방법
2개 이상의 코어가 각기 다른 프로세스의 명령을 실행해서 각 프로세스가 같은 순간에 실행되도록 하는 방법이다.
즉 한 명은 불고기 버거, 한 명은 치킨버거를 만드는 방법이다.
멀티 코어 환경에 맞게 프로그래밍만 잘 되어 있다면 코어의 개수만큼 빠른 일 처리가 가능하다.
그러나 프로세스가 4개지만 코어는 2개인 경우 2개만 동시에 작업이 진행되고 나머지는 대기상태에 놓인다.
(2) 병행 처리 방법(멀티프로세싱)
하나의 코어가 여러 프로세스를 돌아가면서 조금씩 처리하는 것을 말한다.
(여러 개의 코어가 여러 프로세스를 돌아다니는 것도 가능)
병행 처리란 작업을 조금씩 나누어 실행하면서 컴퓨터가 마치 여러 작업을 동시에 실행하는 것처럼 보이게 하는 처리 방법이다.
일정한 시간 간격으로 수행해야 하는 스레드를 전환한다.
스레드를 전환할 때는 운영체제의 스케줄러의 기준에 따라 순서가 정해지게 된다.
여러 스레드를 번갈아 처리하기 때문에 엄밀히 말하면 한 번에 한 가지를 처리하지만 동시에 작업하는 듯한 효과를 준다.
프로세스 또는 스레드 간의 작업 전환을 '콘텍스트 스위칭(context switching)'이라고 한다.
여러 개의 프로세스를 함께 진행하는 것을 멀티 프로세싱이라고 한다.
3. 멀티태스킹과 멀티스레딩
멀티태스킹이란
멀티 태스킹이란 두 가지 이상의 작업을 동시에 처리하는 것을 말한다.
우리가 사용하는 원도우나 유닉스를 포함한 대부분의 OS는 멀티태스킹(다중작업)을 지원하기 때문에 여러 개의 프로세스가 동시에 실행될 수 있다.
예를 들어 워드로 문서작업을 하는 동시에 음악을 듣는 것은 OS가 프로세스마다 작업을 병렬로 처리하기에 가능하다.
멀티태스킹은 우리가 일상에서 사용하는 모든 컴퓨터에서 적용되며, 여러 개의 애플리케이션을 실행하거나 웹 브라우징 등에서 사용된다.
멀티스레딩이란
멀티 스레딩은 하나의 프로세스 내에서 여러 스레드가 동시에 작업을 수행하는 것이다.
실제로 동시에 처리되는 작업의 개수는 코어의 개수와 일치한다. (1개의 코어는 한 개의 프로세스를 담당)
예를 들어 메신저 프로세스 같은 경우 채팅 기능을 제공하면서 동시에 파일 업로드 기능을 수행할 수 있다.
이처럼 한 프로세스에서 멀티 태스킹이 가능한 이유는 멀티 스레드(Multi Thread) 때문이다.
스레드의 수는 언제나 코어의 개수보다 훨씬 많기 때문에 각 코어가 아주 짧은 시간 동안 여러 작업을 번갈아 가며 수행함으로써 여러 작업들이 모두 동시에 수행되는 것처럼 보이게 한다.
*단 프로세스의 성능이 단순히 스레드의 개수에 비례하는 것은 아니며, 하나의 스레드를 가진 프로세스가 오히려 더 좋은 성능을 보일 수도 있다.
싱글스레드와 멀티스레드
싱글스레드는 한 작업을 마친 후에 다른 작업을 시작한다.
멀티스레드(스레드가 2개라고 가정)는 짧은 시간 동안 2개의 스레드를 번갈아가며 작업을 수행한다.
여기서 단순작업(계산 작업 등)을 한다면 싱글스레드가 더 효율적이다.
왜냐하면 멀티스레드는 작업 간의 전환(콘텍스트 스위칭)을 할 때 현재 진행 중인 작업의 상태, 실행해야 할 위치 등의 정보를 읽어와야 하기 때문에 더 많은 시간이 걸린다.
그러나 두 스레드가 서로 다른 자원을 사용하는 경우에는 멀티스레드의 효율이 더 좋다.
예를 들어 데이터를 입력받는 작업과 프린트하는 작업이 필요할 경우, 멀티스레드는 사용자로부터 입력을 기다리는 시간을 활용하여 다른 작업을 진행할 수 있기 때문에 더 효율적이다.
멀티스레딩의 장단점
장점으로는
CPU의 사용률을 향상시킨다.
자원을 보다 효율적으로 사용할 수 있다.
사용자에 대한 응답성이 향상된다.
작업이 분리되어 코드가 간결해진다.
만약 싱글스레드로 작성되어 있다면, 파일을 다운받는 동안 채팅을 할 수 없는 프로그램이 될 것이다.
단점으로는
여러 스레드가 같은 프로세스 내에서 자원을 공유하면서 작업하기 때문에 *동기화, *교착상태와 같은 문제가 발생할 수 있다는 것이다.
교착상태란?
교착상태란
두 스레드가 자원을 점유한 상태에서 서로 상대편이 점유한 자원을 사용하려고 기다리느라 진행이 멈춰있는 상태를 말한다.
동기화란?
동기화란
멀티스레드 프로세스의 경우 여러 스레드가 자원을 공유해서 작업하기 때문에 서로에게 영향을 줄 수 있다.
이러한 일을 방지하기 위해 한 스레드가 진행 중인 작업을 다른 스레드가 간섭하지 못하도록 막는 것을 '스레드 동기화(Synchronization)'라고 한다.
★ 요약
여러 개의 프로세스 처리 방법
은행 웹 사이트를 이용한다는 가정에서
멀티프로세싱 : 은행 웹사이트는 사용자가 요청하는 페이지마다 다른 프로세스가 처리되어야 한다. 이때, 각각의 페이지 처리를 다른 프로세스로 분할하여 처리하는 것이 멀티프로세싱이다. 예를 들어, 로그인 페이지 처리, 계좌조회 페이지 처리, 이체 페이지 처리 등 각각 다른 프로세스에서 처리된다.
멀티태스킹 : 은행 웹사이트에서는 여러 사용자가 동시에 접속하여 요청을 보낼 수 있다. 이때, 서로 다른 사용자 요청에 대해 동시에 처리하는 것이 멀티태스킹이다. 예를 들어, 사용자 A가 로그인을 시도하고 있는 동안, 사용자 B는 계좌조회를 시도할 수 있다. 이때, 서로 다른 사용자 요청을 동시에 처리하는 것이 멀티태스킹이다.
멀티스레딩 : 은행 웹사이트에서는 각각의 사용자 요청을 처리하기 위해 여러 스레드가 생성된다. 예를 들어, 사용자 A가 로그인을 시도하고 있는 동안, 로그인 요청 처리를 담당하는 스레드가 생성된다. 이때, 여러 스레드가 동시에 실행되어 서로 다른 사용자 요청을 처리하는 것이 멀티스레딩이다..
즉 멀티프로세싱은 하나의 요청을 여러 개의 프로세스로 나누어 처리하는 것이고
멀티태스킹은 여러 요청을 동시에 처리하는 것이며,
멀티스레딩은 하나의 요청을 여러 개의 스레드로 처리하는 것이다.
잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다. |
'CS > CS' 카테고리의 다른 글
[프로젝트 설정] XML과 Java Configuration 설정 방식 (1) | 2024.10.13 |
---|---|
SQL Mapper와 ORM이란? (0) | 2023.05.14 |
컴퓨터 구성요소 (0) | 2023.05.07 |
XML, JSON (0) | 2023.04.05 |
API, REST, REST API (0) | 2023.04.01 |