Skip to content

Latest commit

 

History

History
71 lines (36 loc) · 2.79 KB

File metadata and controls

71 lines (36 loc) · 2.79 KB

멀티 쓰레드 비유

고급 식당을 운영한다고 생각해보면 좋다.

image

식당을 운영해본다고 가정해보자.

식당의 직원이 있지만 영혼이 있어야 직원이 움직일 수 있다.

위와 같이 식당의 직원이 4명이 있지만 영혼은 하나 밖에 없기 때문에 한번에 한명의 직원명 동작할 수 있따.

image

실제 컴퓨터에서는 위와 같이 대응이 된다.

image

그리고 위와 같이 식당을 운영하는 것과 실제 컴퓨터가 동작하는 것이 대응한다.

운영체제의 스케줄링을 통해 다양한 프로세스를 돌아가면서 실행한다.

단, 프로세스의 우선 순위에 따라 더 많이 실행됨

기아 현상 → 우선 순위가 낮아서 잘 실행되지 않음

[운영체제 커널 모드]

윈도우즈의 2가지 영역

프로그램을 실행하는 영역(유저 영역)

커널 모드 → 윈도우즈의 핵심 로직이 돌아가는 영역

image

단일 코어만으로는 발연 문제를 해결하지 못해서

코어의 개수를 늘리는 방식을 사용

멀티 코어를 사용해서 여러 쓰레드를 동시에 실행할 수 있게 됨

하지만 쓰레드를 무작정 늘리는 것 → 문제 발생

빙의 즉 코어가 하나의 쓰레드를 실행하고 다른 쓰레드로 옴겨 타는 과정이 굉장히 무겁기 때문

image

코어 수 만큼 쓰레드를 실행하는 것이 가장 이상적

image

실제 게임 프로그램의 쓰레드 배치

image

쓰레드는 모두 힙 영역데이터 영역을 공유

스택만 따로 분리됨

image

한쪽으로만 다 몰리는 상황이 나타날 수 있음

쓰레드 관리를 잘못하는 순간 직원이 한명 두는 것보다 못할 수 있음

식당 운영을 1명한 했을 때 잘 돌다가

직원이 100명으로 늘었을 때 관리가 잘 되지 않을 수도 있음

직원들(쓰레드)이 최대한 효율적으로 움직일 수 있게 배치하는 것이 관건