병렬처리(Parrelel Processing)란?
- 병렬처리란 여러 개의 작업을 동시에 실행하여서 효율을 높이는 것을 의미.
- 현재 멀티 코어로 인해 성능이 매우 좋아짐
- 병렬처리는 여러 쓰레드를 활용하는 방법이 있고, 여러 개의 프로세스를 활용하는 방법이 있으며 각각 멀티 쓰레드, 멀티 프로세싱이라고 부름.
순차 처리 와 병렬 처리
순차처리
- 문제가 일련(순차)의 개별 명령어로 나누어져 있음.
- 명령어들은 순차적으로 단일 프로세서에서 실행.
- 어떤 한 순간에는 한 명령어만 실행.
병렬처리
- 문제는 동시에 해결할 수 있는 개별적인 부분 문제로 나누어 짐.
- 각 부분 문제는 일련(순차)의 명령어들로 세분화
- 각 부분 문제의 명령어는 서로 다른 프로세서(코어-쓰레드)에서 동시에 실행된다.
- 동시에 작업하는 과정 항상 제어와 조저의 알고리즘이 필요.
프로세스 VS 스레드
프로세서
- 중앙처리장치(CPU)
- 명령어를 해석하는 장치
- 코어: 한번에 N개의 쓰레드를 처리하는 단위
- 쓰레드: CPU 내부에서 작업을 수행하는 가장 작은 단위
프로그램
- 어떤 작업을 위해 실행할 수 있는 파일.
- 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태
- 정적 데이터와 명령어로 구성되어 있는 코드 덩어리.
프로세스
- 실행된 프로그램을 의미
- 메모리(RAM)에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
- 운영체제로 부터 시스템 자원을 할당받는 작업의 단위
특징
- 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받음.
- 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근 할 수 없다.
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신을 사용해야 됨.
- Ex) 파이프, 파일, 소켓 등을 이용한 통신 방법 이용.
스레드
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
특징
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 자원들[Code, Data, Heap 영역]은 공유
- 각각의 스레드는 별도의 레지스터(cpu가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치)와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있음.
자바 프로세스안 스레드
public class ThreadTest extends Thread
{
public void run()
{
// 인터럽트 됬을때 예외처리
try
{
for(int i = 0 ; i < 10 ; i++)
{
// 스레드 0.5초동안 대기
Thread.sleep(500);
System.out.println("Thread : " + i);
}
}catch(InterruptedException e)
{
System.out.println(e);
}
}
}
// Process1.class
public class Process1
{
public static void main(String args[])
{
ThreadTest t1 = new ThreadTest();
ThreadTest t2 = new ThreadTest();
//1. 동시에 똑같은 숫자가 나오고(start)
t1.start();
t2.start();
}
}
멀티 프로세스 VS 멀티 스레드
- 대부분 하나의 프로그램내에서는 멀티 스레드 개념을 사용하지만, workers 같은 분할 작업은 멀티 프로세스 사용.
컨텍스트 스위칭(Context Switching)
- 프로세스 간, 쓰레드 간의 전환
- 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업.
멀티 프로세스(Multi Process)
- 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업(테스크)을 처리하도록 하는 것.
- 장점
- 프로세스가 죽어도 다른 프로세스에 영향을 안 준다.
- 단점
- 프로세스 간 통신(IPC,Inter Process Communication)를 사용.
- 프로세스는 독립된 메모리이기 때문에 변수를 공유 못함.
- 복잡한 통신 개념이기 때문에 속도가 느림.
- 프로세스 간 통신(IPC,Inter Process Communication)를 사용.
멀티 스레드(Multi Thread)
- 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것.
- 장점:
- 시스템 자원 소모 감소
- 간단한 통신 방법으로 속도 빠름
- 단점:
- 복잡함.(디버깅 어려움, 주의 깊게 설계)
- 다른 프로세스의 스레드를 제어 못함.
- 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음.
멀티 쓰레드 동작 방식
- 프로그램이 메모리에 적재되어 Process가 생성.
- Process는 필요한 독립된 작업의 수 만큼 스레드를 생성.
- cpu 코어 하나당 스레드를 동시에 실행할 수 있는데(하이퍼스레딩 적용X), 스레드의 수가 더 많아지면 컨텍스트 스위치를 해야함.
- (컨텍스트 스위치 할시) 아주 짧은 시간 스레드 a를 실행시키고 멈춘 후, 스레드 b를 실행시키고 멈춤, c를 실행시키고 멈춤... 다시 a를 ... 이런식으로 필요한 스레드르 조금씩 빠르게 번갈아가며 실행, 정지 함.
- 멀티 프로세스도 동일한 원리로 작동하지만 프로세스와 달리 스레드는 '스택 영역을 제외하고 자원을 공유'하고 있기 때문에 컨텍스트 스위치시 발생하는 비용이 적음.
'Computer Science' 카테고리의 다른 글
Mysql 풀텍스트인덱스(Full-Text Index) (0) | 2024.05.08 |
---|---|
클로저(Closure) (0) | 2024.04.24 |
코루틴(Coroutine) (0) | 2024.04.24 |
순수함수(Pure Function) (0) | 2024.04.10 |
코틀린(Kotlin) (0) | 2024.04.07 |