Programming/Process & Multi Threading

[Java] 프로세스와 스레드 비교(프로세스/스레드, 싱글/멀티 스레드)

dev.pudding 2023. 12. 9. 15:04
728x90
목차
1. 프로세스(Process)와 스레드(Thread)
2. 싱글스레드의 프로세스
3. 멀티스레드의 프로세스 

 

싱글스레드(Single Thread)와 멀티 스레드(Multi Thread)의 차이점을 이해하기 위해서는 프로세스와 스레드의 기본적인 개념부터 이해하고 있어야한다. 따라서  '1.프로세스(Process)와 스레드(Thread)'에 기본 개념을 간단하게 정리해두었다.  스레드에 따른 프로세스의 차이를 정리했다. 


1. 프로세스(Process)와 스레드(Thread) 

1. 프로세스(Process) : 프로세스는 쉽게 말하면 '컴퓨터에서 실행되고 있는 모든 프로그램'들을 말한다. 다른 말로 '실행 인스턴스'라고도 할 수 있으며,  더 정확한 용어로는 '실행 인스턴스를 나타내는 독립적인 단위'를 의미한다.

 

ex) 컴퓨터에서 엑셀을 실행한다면 엑셀 프로세스가 실행되고 있는 것이다.

 

  • 프로세스(Process)의 구조 

  •     각각의 프로세스는 운영체제(OS)로 부터  register, stack memory, heap memory 영역을 부여받는다. 
  • 실행 중인 프로세스(process) 확인방법 

  • cmd에서 'tasklist'를 검색하면 운영체제(OS)에서 실행 중인 프로세스가 나열된다. 
  • 'PID'는 'Process ID'의 줄임말이다. 말 그대로 프로세스의 고유 ID를 의미한다.
  • 메모리 사용은 프로세스의 메모리 사용량이다. 

 

2. 스레드(Thread) : '프로세스의 내부에서 실행되는 더 작은 단위의 실행단위'이다.  

 

  • 프로세스와 스레드의 관계 

 

  • 그림은 프로세스 안에있는 스레드의 구조를 나타낸다.
  • 하나의 프로세스는 여러개의 스레드로 구성되어있다.
  • 각각의 스레드는 서로 메모리와 자원을 공유하기 때문에 프로그램 설계시 동시성(concurrency)를 신경써야한다.

2. 싱글스레드의 프로세스 

1. 프로그램의 실행순서

Programming languages are sequential (프로그래밍 언어는 순차적이다)

 

순차적이라는 말은 어떤 일이나 문제를 해결할 때 차례대로 하나씩 진행되는 것을 말한다. 기본적으로 프로그래밍 언어는 명령어를 동시에 실행하는 것이 아닌 순차적으로 하나씩 실행되는 메커니즘이다. 

 operation #1의 실행이 끝나야 operation #2의 실행이 시작된다.  operation #4까지 진행되려면 #1부터 #3까지의 모든 실행이 끝났을 때 이루어진다.

 

다음은 프로그램의 실행순서를 표현한 자바코드이다. 

public static void main(String[] args){
        initializeArrays();
        downloadData();
        buildModel();
}

JVM의 프로세스 실행순서는 다음과 같다.

  1. main() 메소드를 실행시킨다.
  2. initializeArrays() 메소드가 실행되어 데이터를 저장할 인스턴스를 만든다.
  3. initilizeArrays()의 실행이 완료되면 downloadData()로 데이터를 저장한다.
  4. 데이터의 저장이 완료되면 마지막으로 buildModel()로 빌드를 실행한다.

이 예시들은  한 번에 하나의 작업만 처리하는 싱글 스레드(Single Thread) 어플리케이션 환경에서 적용되는 것이다. 하지만 이는 사용자 입장에서 불편한 경우가 생길 수 있다.  왜냐하면 실행 절차 중 하나라도 실행이 되지 않는 경우 다음 작업에 락이 걸려서 로딩시간이 엄청나게 소요된다.

 

2.멀티스레드가 필요한 이유 

멀티스레드를 사용하는 가장 큰 이유는 프로세스 내부의 스레드 작업 단위들을 독립적으로 여러개로 나누어서 전체적인 실행환경에 영향을 주지 않도록 하기 위해서이다. 이렇게 되면 하나의 작업 단위에 버그가 생겨도 다른 작업단위들에게 영향을 주지 않기때문에 프로그램 실행 중 락이 걸리는 확률이 줄어든다.


3.멀티스레드의 프로세스 

1.CPU 코어의 스레드 관리법

CPU 코어란 CPU에 포함되어있는 핵심 하드웨어 부품 중 하나이며 명령어 해석 및 실행, 산술 및 논리 연산, 레지스터 및 캐시 메모리 사용 등의 역할을 수행한다.  즉 프로세스의  '스레드를 실행시키는 주체는 CPU의 코어'이다. 

CPU의 추상 디자인 도면

현대의 대부분의 컴퓨터는 그림과 같이 코어가 여러개로 구성된 멀티코어 CPU를 탑재하고있다. 

멀티스레드를 실행시키는 방법은 크게 두가지로 나누어져 있는데 CPU코어를 한개(싱글코어)만 사용하거나, CPU코어를 여러개 사용(멀티코어)하는 케이스가 있다. 

 

2. 싱글코어의 스레드 실행방법 

 

하나의 프로세스에 여러개의 스레드가 있는 어플리케이션이 있다고 가정해보자. 

하나의 프로세스에 여러개의 스레드가 있다.

만약 싱글코어인 상태라면 하나의 CPU 코어가 Thread1,Thread2,Thread3 모두를 관리해야한다. 이 때 CPU 코어가 사용하는 방법은 시분할 알고리즘(Time-slicing algorithm)이다.

*시분할알고리즘은 시분할 시스템 (Time Sharing System) 이라고도 불린다.

 

시분할 알고리즘이란 CPU가 싱글코어인 상태인 경우 스레드를 분할하여 관리하는 알고리즘 방식의 하나이다. 

시분할 알고리즘의 작동방식

싱글코어는 Thread1과 Thread2를 실행시키기 위해서 각각 시간을 쪼개서 실행한다. Thread1을 실행하고 잠깐 기다리게 하고 , 그 빈틈에 Thread2를 실행하고 다시 기다리게하고 , 다시 Thread1을 실행하고 기다리게하고. 이런식으로 시간을 분할하여 여러개의 스레드가 실행도록 한다.

 

2. 멀티코어의 스레드 실행방법 

멀티코어의스레드 실행방식

CPU1과 CPU2는 각각의 코어를 나타낸다. 이렇게 CPU에 코어가 여러개인 경우 멀티코어 상태이며 각각의 CPU 코어가 병렬(Parallel)형태로 동시에 스레드를 실행시킨다.

병렬성(Parallelization)은 멀티코어 상태에서 멀티스레드를 실행시키는 방식으로, 한개 이상의 스레드를 포함하는 각 코어들이 '동시에' 실행되는 성질을 말한다. 

 

3.멀티스레드의 장점과 단점 

 

멀티스레드의 장점 :

  1.  프로세스 내부의 자원을 스레드가 서로 공유하여 효율적으로 작업을 처리할 수 있다.
  2. 작업을 진행하기 위해 새로운 프로세스를 만드는 것 보다 기존 프로세스에서의 스레드 작업전환이 더 빠르다.

 

멀티스레드의 단점 :

  1. 데이터를 조작하는 과정이 복잡하다.
    하나의 프로세스는 한정된 자원을 가지고 있는데 스레드는 동일한 자원을 나눠서 관리해야되기 때문에 데이터의 조작시 주의가 필요하다. 이때는 동기화(synchronization)에 대한 알고리즘을 고려한다.
  2. 테스트가 힘들다.
    멀티스레드 환경에서 여러 스레드가 동시에 공유자원에 접근하려고 할 떄 경쟁 조건이 발생할 수 있다. 이는 테스트 과정에서 재현하기가 매우 어렵다. 또한 운영체제의 요인(스케줄링)에 의한 것일 수 있기 때문에 개발자가 버그찾기란매우 어렵다.
  3.  스레드가 많을 수록 런타임이 길어진다. 

멀티스레드를 적당히 사용한다면 런타임이 줄어드는 장점이 있지만, 스레드가 늘어날 수록 런타임이 오히려 길어지는 단점이 있다. 어플리케이션의 규모가 작은 경우라면 싱글스레드로 구현하는 것이 좋다

 

결론

멀티스레드는 한정된 자원을 효율적으로 활용할 수 있지만, 테스트 및 버그찾기가 어렵고 스레드가 많을 수록 런타임이 느려지는 단점이 있다. 따라서 시스템 디자인 단계에서는 먼저 싱글스레드로 알고리즘을 설계해보고 , 성능 최적화를 위해 멀티스레딩을 고려하는 것이 바람직하다.

 

 

 

 

 


출처

https://www.baeldung.com/cs/core-vs-cpu

 

Differences Between Core and CPU | Baeldung on Computer Science

Learn about the differences between a processing core and a CPU.

www.baeldung.com

https://java-jedi.medium.com/multithreading-threads-and-processes-time-slicing-algorithm-547be0732b5f 

 

Multithreading — threads and processes, time-slicing algorithm

Threads and Processes

java-jedi.medium.com

https://emanuilslavov.com/running-test-in-parallel-optimal-number-of-threads/

 

Running Test In Parallel - Optimal Number Of Threads

June this year I presented at expo:QA conference [http://www.expoqa.com/expoqa16/en.html]. It was a case study on how we increased the execution time of high level automation tests more than 60 times [https://speakerdeck.com/emanuil/need-for-speed-accelera

emanuilslavov.com