우아한테코톡(8), Process vs Thread

2022. 8. 22. 16:11간단한 컴퓨터 이론/우아한테코톡

728x90
반응형

본 포스팅은 우아한Tech의 테코톡 쿼리치님의 Process vs Thread 영상을 정리한 내용입니다.

프로세스와 쓰레드의 간단한 정의 및 특징을 위주로 정리했습니다.

 

쓰레드와 관련된 보다 딥한 내용은 컴퓨터 구조 수업 시간에 수강한 멀티쓰레드 파트를 복습하면 좋을 것 같다.

2022.06.13 - [강의 내용 정리/컴퓨터구조] - 컴퓨터 구조(11), Multithreading

 

컴퓨터 구조(11), Multithreading

Multithreading 1. Multithreading Basic - thread: state한 명령어 스트림. state은 레지스터나 메모리에 있다. 쉽게 생각해서 프로그램으로 볼 수 있다. - 쓰레드 컨텍스트는 레지스터에 있는 state를 의미한다..

konghana01.tistory.com


Process vs Thread

 

1. 멀티 프로세스

프로세스: 자원 할당 단위


프로세스란 프로세서에 의해 실행되는 프로그램이다.  소스코드는 실행되지 않으면 메모리에 저장된 데이터에 불과하다. 소스코드는 프로세서를 통해 프로세스가 될 수 있다.

프로세서는 간단하게 CPU로 생각할 수 있다. 프로그램은 작성한 코드로 고려할 수 있다. 프로그램은 ram에 올라가고, 명령어가 2진수로 이뤄져있다. 이는 프로세서로 이동했을 때 파이프라인을 통해 하나하나 실행하면 이는 프로세스가 된다.

 

 

멀티 태스킹

CPU는 하나에 한번의 프로그램을 실행한다. 하지만 여러 프로세스를 번갈아가면서 실행시킨다면 우리는 동시에 진행하는 것처럼보인다. 이는 context switching이라 한다.

 

cf) context switcing은 엄밀한 의미에서의 병렬성(Parallel)과는 다르다. 병렬성은 동시에 작업이 이루어지는 것을 의미한다. context switching은 동시성(Concurrency)을 의미하고 이는 작업을 빠른 시간 내에 번갈아가면서 실행시킨다는 의미이다.

Concurrency는 번갈아가며 작업을 진행한다.
parallel은 동시에 작업이 이뤄진다.

 


 

Process Conctrol Block

 

프로세스 구조

- 프로세스는 Code, Data, Heap, Stack 영역이 있다. 

 

 

한 작업을 여러 프로세스가 나눠서 작업한다.

 

현재 작업 중인 프로세스를 메모리에 적재해 작업을 원활하게 진행할 수 있다.

 

한 작업을 여러 프로세스가 나눠 작업하는 경우에는 각 프로세스는 서로 같은 코드 데이터를 가지고 있게 되는데 메모리를 올리고 내리는 작업을 반복하게 된다. 각 프로세스가 가지고 있는 정보를 서로 사용하는 경우에 속도가 느려진다거나, 정보가 훼손될 수 있는 문제가 발생할 수 있다. 이를 해결하기 위해 하나의 프로세스에서 쓰레드를 나누는 멀티 쓰레드라는 개념이 등장한다. 


2. 멀티 쓰레드

쓰레드: 작업 단위

 

작업의 주체는 쓰레드이다. 앞서 설명한 방식은 단일 쓰레드일 때를 가정한 것이다. 

멀티 쓰레드는 멀티 프로세스의 단점을 보완할 수 있다. 쓰레드는 한 프로세스 내부의 실행 단위이기에 코드, 데이터, 힙 영역을 서로 다른 쓰레드가 공유할 수 있다. 이에 따라 작업을 모두 올리고 내릴 필요가 없어진다. 또한 모든 쓰레드가 모든 같은 프로세스 내부에 존재하기에 통신 비용도 월등히 낮다.


멀티 쓰레드의 단점

현재 프로그램의 대부분이 멀티 쓰레드를 지원하지만 쓰레드가 동시에 같은 데이터에 접근하는 경우 문제가 발생할 수 있다. 이를 방지하기 위해 몇 가지 룰을 정해야한다. 어떤 작업을 하다가 쓰레드가 작업이 중단된다면 전체 프로세스에 영향을 줄 수 있다. 

 

cf) 이러한 문제는 현재 공부 중인 자바 책에서도 언급하고 있다. 병행 프로그래밍에서 이와 관련된 해결책을 제시한다.

 


3. 멀티 코어

코어: CPU에서 작업을 수행하는 주체

 

코어는 파이프라인으로 들어온 명령을 처리한다. 멀티코어는 물리적인 코어의 개수를 늘려서 동시에 작업을 처리할 수 있도록 한다. 

 

 

병렬 처리의 종류

1) 하이퍼 쓰레딩

코어 하나에 파이프 라인을 두 개로 쪼개 병렬적으로 처리한다. 이는 같은 프로세서를 사용한다.

 

2) 멀티 코어

파이프라인마다 독립적인 프로세서가 존재한다. 이 방법은 물리적으로 코어의 개수를 늘려서 사용할 수 있다.

 

3) 멀티 CPU

CPU 여러개를 병렬적으로 여러개 만들어서 사용하는데, 이는 성능이 가장 좋지만 가장 비싸기에 주로 서버에서 사용된다.

 

 

출처


https://www.youtube.com/watch?v=C_P0wHFp1o4 

 

 

https://jenkov.com/tutorials/java-concurrency/concurrency-vs-parallelism.html

 

728x90
반응형