본문 바로가기
  • 🦄 창민이 개발일지
Computer Science

병렬처리(Parallel Processing)

by 창민이 개발일지 2023. 4. 6.

병렬처리(Parrelel Processing)란?

  • 병렬처리란 여러 개의 작업을 동시에 실행하여서 효율을 높이는 것을 의미.
  • 현재 멀티 코어로 인해 성능이 매우 좋아짐
  • 병렬처리는 여러 쓰레드를 활용하는 방법이 있고, 여러 개의 프로세스를 활용하는 방법이 있으며 각각 멀티 쓰레드, 멀티 프로세싱이라고 부름.

순차 처리 와 병렬 처리

순차처리

  • 문제가 일련(순차)의 개별 명령어로 나누어져 있음.
  • 명령어들은 순차적으로 단일 프로세서에서 실행.
  • 어떤 한 순간에는 한 명령어만 실행.

 

병렬처리

  • 문제는 동시에 해결할 수 있는 개별적인 부분 문제로 나누어 짐.
  • 각 부분 문제는 일련(순차)의 명령어들로 세분화
  • 각 부분 문제의 명령어는 서로 다른 프로세서(코어-쓰레드)에서 동시에 실행된다.
  • 동시에 작업하는 과정 항상 제어와 조저의 알고리즘이 필요.

 

프로세스 VS 스레드

프로세서

출처: 다나와, 인텔 i5 13세대

  • 중앙처리장치(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)를 사용.
      • 프로세스는 독립된 메모리이기 때문에 변수를 공유 못함.
      • 복잡한 통신 개념이기 때문에 속도가 느림.

멀티 스레드(Multi Thread)

  • 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것.
  • 장점:
    • 시스템 자원 소모 감소
    • 간단한 통신 방법으로 속도 빠름
  • 단점:
    • 복잡함.(디버깅 어려움, 주의 깊게 설계)
    • 다른 프로세스의 스레드를 제어 못함.
    • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음.

멀티 쓰레드 동작 방식

  1. 프로그램이 메모리에 적재되어 Process가 생성.
  2. Process는 필요한 독립된 작업의 수 만큼 스레드를 생성.
  3. cpu 코어 하나당 스레드를 동시에 실행할 수 있는데(하이퍼스레딩 적용X), 스레드의 수가 더 많아지면 컨텍스트 스위치를 해야함.
  4. (컨텍스트 스위치 할시) 아주 짧은 시간 스레드 a를 실행시키고 멈춘 후, 스레드 b를 실행시키고 멈춤, c를 실행시키고 멈춤... 다시 a를 ... 이런식으로 필요한 스레드르 조금씩 빠르게 번갈아가며 실행, 정지 함.
  5. 멀티 프로세스도 동일한 원리로 작동하지만 프로세스와 달리 스레드는 '스택 영역을 제외하고 자원을 공유'하고 있기 때문에 컨텍스트 스위치시 발생하는 비용이 적음.

 

'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