티스토리 뷰

CS

CPU-프로세스와 스레드

Greatshine 2023. 2. 7. 15:38

 

 

프로세스와 스레드를 알아보기 전에 먼저 CPU가 어떻게 작동하는지 확인해 보면 좋다.

 

https://youtu.be/WGKHEIpXy5c

 

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

 

 

프로세스

 

프로그램이란 '어떤 일을 수행하기 위해 만들어진 명령 모음'이다.

즉, 명령의 모음이 파일로 빌드되어 보조 기억 장치에 저장되어 있는 정적인 상태라고 할 수 있다.

☞ 여러 가지 음식 재료가 냉장고 안에 보관되어 있는 상태

 

사용자가 프로그램 실행 명령을 내리면 CPU는 보조 기억 장치에서 해당 프로그램을 꺼내

메인 메모리에 올려놓고 코드를 해석하며 작업을 시작하는데,

이처럼 프로그램이 메인 메모리로 올라와 실행되고 있는 상태를 프로세스라고 한다.

☞ 냉장고에서 음식 재료를 꺼내 어떤 특정 요리를 진행하는 것

 

만약 여러 프로세스를 함께 처리해야 한다면, CPU는 이를 어떻게 처리하게 될까?

☞ 여러 요리 주문이 함께 들어온다면, 식당에서는 이를 어떻게 처리할까?

 

 

https://techdifferences.com/difference-between-concurrency-and-parallelism.html

 

병렬 처리(Parallelism)

여러 작업을 동시에 실행하는 방법.

2개 이상의 코어가 각기 다른 프로세스의 명령을 실행해서 각 프로세스가 같은 순간에 실행되도록 하는 방법이다.

 

즉, 코어 하나하나가 각 프로세스를 맡아서 처리를 하는 것이다.

☞ 4개의 요리가 들어왔고, 4명의 요리사가 있다면(4 core CPU) 하나의 요리를 한 명씩 맡아서 처리

 

병행 처리(Concurrency)

하나의 코어가 여러 프로세스를 돌아가면서 조금씩 처리하는 방법.

☞ 1명의 요리사가 4개의 요리를 조금씩 돌아가면서 동시에 처리한다.

 

즉, 작업을 조금씩 나누어 실행하면서 컴퓨터가 마치 여러 작업을 동시에 실행하는 것처럼 보이게 하는 처리 방법이다.

이렇게 프로세스 진행 순서를 바꾸는 것을 컨텍스트 스위칭(Context Switching)이라고 한다.

 

 

프로그램이 효율적으로 설계되었다면 병렬과 병행처리 방식을 혼합해서 사용하고

이렇게 여러 개의 프로세스를 함께 진행하는 것을 멀티 프로세싱(Multi-processing)이라고 한다.

 

https://devwhkang.gatsbyjs.io/posts/thread/ 멀티 프로세싱

 

 

스레드

 

한 프로세스 안에는 여러 작업이 동시에 진행되기도 한다.

채팅 앱을 예로 들면, 동영상을 다운로드하으면서 채팅을 보낼 수 있고,

채팅을 보내는 도중에도 상대방의 메시지를 확인할 수 있다.

이렇게 프로세스 안에 하나 이상 진행될 수 있는 일의 단위를 스레드라고 한다.

☞ 햄버거를 만드는 작업을 프로세스라고 친다면 

빵을 데운다 / 패티를 굽는다 / 야채를 손질한다 등의 작업을 스레드라고 볼 수 있다.

 

스레드도 프로세스와 마찬가지로 컨텍스트 스위칭을 통해 여러 개의 작업이 병행 처리되며

이렇게 여러 스레드가 함께 실행되는 것을 멀티 스레딩(Multi-threading)이라고 한다.

 

 

프로세스 vs 스레드

 

중요한 차이점은 '메인 메모리를 어떻게 함께 사용하는가'이다.

 

프로세스는 메인 메모리에서 각자의 영역을 명시해 둔다.

즉, 각 프로세스는 각자의 영역에서만 활동한다는 뜻이다.

☞ 메모리를 탁자라고 했을 때 햄버거를 만들 공간, 피자를 만들 공간, 파스타를 만들 공간 등이 명시되어 있다.

그렇기 때문에 동시에 진행되는 프로세스가 많아지면 많아질수록 메인 메모리는 그만큼 더 필요하게 된다.

 

하지만 스레드는 서로의 공간을 구분하지 않는다.

하나의 프로세스에 속한 모든 스레드는 그 프로세스의 공간을 공유할 수 있다.

☞ 햄버거를 만드는 공간에서 빵을 데우는 공간, 야채를 손질하는 공간 등을 따로 구분하지 않는다.

그렇기 때문에 스레드가 많아진다고 해도 메모리를 추가로 차지하지 않는다. (컨텍스트 스위칭 부담도 덜하다.)

 

성능상으로만 보면 스레드가 유리하지만

같은 공간을 공유하기 때문에, 발생하는 오류들이 많다.

☞ 라면을 끓이는 버너가 존재한다고 했을 때 하나의 버너에 두 개의 라면 냄비가 동시에 들어올 수도 있다.

따라서 이런 오류에 대비하여 프로그래밍을 해야 한다.

 

 

 

 

참고 자료

 

https://www.youtube.com/watch?v=iks_Xb9DtTM 프로세스는 뭐고 스레드는 뭔가요?

 

https://hongong.hanbit.co.kr/cpu%EA%B0%80-%EB%A9%80%ED%8B%B0%ED%83%9C%EC%8A%A4%ED%82%B9%EC%9D%84-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-vs-%EC%8A%A4%EB%A0%88%EB%93%9C/ cpu가 멀티태스킹을 하는 방법

 

 

 

'CS' 카테고리의 다른 글

대규모 트래픽 처리 (2)  (0) 2023.03.07
대규모 트래픽 처리 (1)  (0) 2023.03.01
index, B tree, B+ tree  (0) 2023.02.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함