작성
·
319
0
안녕하세요. 강사님
멀티쓰레드 부분 강의를 듣고 궁금한점이 생겨 질문드립니다.
우선 하나의 프로그램에 여러 개의 쓰레드를 부여한다라는 것은 동시에 여러 작업들을 할 수 있다 정도로 이해를 했습니다.
문득 궁금한 점이 생긴 부분은 작업 관리자에서 성능 부분을 보면 저의 경우 논리 프로세서가 12개라고 나옵니다.
그렇다면 논리적으로 12개의 코어를 사용한다고 판단되어 지는데요.
여기서 백단에서 프로세스가 170개 가량이 돌아가는 데 스레드가 대략 2400개 정도 실행되고 있습니다.
백단에서 실행되는 프로세스가 엄청나게 많고 그 백단에서 실행되는 프로세스들 조차도 실행되기 위해서는 CPU 코어를 일정시간 획득해야 되는 것이겠지요 ?
그렇다면 엄청나게 빠르게 12개의 코어를 2400개의 쓰레드에게 일정시간 씩 분배하고 있다고 생각 되어지는 데요.
그렇다면 제가 작성한 프로그램에서 5개의 쓰레드를 운영한다고 해도 5개의 코어를 동시다발적으로 획득하는 것이 아닐테고 고 순차적으로나마 하나의 프로그램이 5번의 코어를 할당받아 5개의 실행흐름을 각각 수행하고 다른 프로그램으로 CPU 제어권을 넘겨주는 방식으로 이해하면 될까요 ?
답변 1
1
동시다발적일 수도 있고, 아닐 수도 있습니다.
그건 운영체제가 정해주기 나름이죠.
그리고 말씀처럼 우리가 띄운 프로그램 이외에도
정말 많은 프로그램들이 백그라운드에서 실행되고 있습니다.
심지어 커널 모드로 전환되어 OS 자체의 프로그램이 실행되기 위해서도
결국 CPU를 점유해서 실행해야 하니,
실제 실행을 갈구하는 후보들은 눈에 보이는 것 이상으로 많습니다.
다만 그 모든 프로그램들이 우리 서버처럼 빡센
CPU 점유율을 요구하는 그런건 아닙니다.
그리고 결정적으로 서버를 띄우는 컴퓨터에서는
일반적인 가정용 윈도우 OS를 설치하는게 아니라
서버 전용 Windows Server OS를 설치하는데,
Win Server에서는 꼭 필요한 프로그램들만 구동하기에 훨씬 가볍습니다.