강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

writer0713님의 프로필 이미지
writer0713

작성한 질문수

기초 탄탄! 독하게 시작하는 Java Part 3(상) : 멀티스레드와 동기화

가상 스레드 개념 소개

cpu 코어와 쓰레드 개수

해결된 질문

작성

·

14

·

수정됨

0

설명에서 멀티코어 CPU 가 8개 있으면 한번에 16개 쓰레드를 실행할 수 있다고 말씀하시면서 설명을 진행해주셨는데요.

 

이전부터 궁금한게 있습니다. (제가 경험한 바로) 실무에서는 하나의 서버에 하나의 어플리케이션 (ex. 자바 웹 어플리케이션) 만 올려왔습니다. 이런 경우에는 위에서 말씀하신것처럼 웹 애플리케이션의 쓰레드들이 모든 cpu core 를 사용하게 될거라고 예상이 됩니다.

 

반면에 저희가 평소에 사용하는 환경 (ex. 윈도우) 에서는 하나의 유저 어플리케이션만 돌아가는게 아니라, 여러개의 유저 어플리케이션이 돌아갈텐데요. 예를 들어, intellij, chrome, 실습중인 자바 웹어플리케이션 등이 동시에 돌아가게 되면 각각의 유저 어플리케이션 내부에 존재하는 쓰레드들이 cpu 코어를 나눠쓰게 된다고 알고 있습니다. 이런 경우에는, 강좌에서 설명하신것처럼 cpu core 8개를 기준으로 최적화를 해도 사실상 제대로 최적화가 안될거 같은데 맞을까요 (= 다른 어플리케이션이 같이 돌아가니)?

 

그리고, cpu 코어를 사용하는 순서 (스케줄링) 는 os 에 의해서 정해지는걸로 알고 있는데요. 예를 들어, intellij (쓰레드 3개), chrome (쓰레드 5개), 웹서버 (쓰레드 50개) 라고 가정했을때 쓰레드가 많은 유저 어플리케이션이 cpu 의 사용횟수가 많을거라고 생각해도 될까요? 아니면, os 에서 유저 어플리케이션 3개에 공평하게 30% 씩 사용시간을 분배하고 이 30%의 시간을 내부에 있는 쓰레드들이 나눠쓰게 되는걸까요?

 

강사님 설명이 너무 좋아서 여러 방면에서 생각하다보니 질문이 많아졌습니다.

 

답변 미리 감사합니다 🙂

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

한 JVM의 스레드 개수라 CPU 코어 개수에 맞춘다 하더라도 생각하시는 것처럼 다른 응용 프로그램들의 스레드들도 함께 실행되기 때문에 잦은 스위칭을 피할 수는 없습니다. 그래서 보통 서버들은 서버로 기능하기 위해 필요한 것만 남기고 대부분의 프로세스들을 실행시키지 않습니다. 그렇게 최소화 시키는 것이 최적화라 할 수 있고요. 어쨌든 그것은 환경적인 문제이고 서버 응용 프로그램을 구동하는 JVM만 놓고 생각하면 CPU 개수 만큼으로 한정하는 것이 여러 면에서 낫긴 합니다만 이것도 정답은 아닙니다. 서버 구조에 따라 스레드를 더 늘리는 것이 좋을 수도 있습니다. 이는 전적으로 어떤 처리가 이루어지는 것인가에 달려 있습니다.

그리고 스레드 개수가 많다고 하더라도 유휴 상태가 되어 있다면 실제로 실행으로 이어지지 않습니다. CPU 사용을 요청하는 스레드들에 대해서만 운영체제가 CPU 사용에 대해 스케쥴링합니다. 스케쥴링 기준은 스레드 우선순위에 따라 달라질 수 있습니다. 만일 모든 스레드가 우선순위가 같다면 공평하게 분배가 될 것입니다. 그렇지 않다면 순위가 높은 스레드가 더 오래도록 CPU를 사용하게 되고요.

이와 관련된 이야기들은 운영체제론을 공부하면 알 수 있습니다. 백엔드 개발자로 성장하고 싶다면 IT인프라에 대한 이해와 운영체제는 반드시 공부하시기 바랍니다. 실무를 경험하면서 발생하는 문제를 해결하려면 CS기본 이론은 언제나 중요하게 작용하기 때문입니다. 참고하시기 바랍니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다. writer0713님.

멀티코어 환경에서의 CPU 코어와 쓰레드 최적화에 대한 질문을 주셨네요. 멀티코어 및 멀티쓰레드 환경에서 CPU 활용은 여러 요소를 고려해야 하는 복잡한 주제이지만, 주요 원칙을 간단히 설명해드리겠습니다.

멀티코어와 쓰레드 실행

멀티코어 CPU를 가진 시스템에서는 여러 개의 코어가 동시에 여러 쓰레드를 실행할 수 있습니다. 일반적으로 하나의 코어는 한 번에 하나의 쓰레드를 실행하지만, 하이퍼스레딩 기술을 통해 하나의 코어가 두 개의 쓰레드를 실행할 수 있는 경우도 있습니다.

여러 어플리케이션과 CPU 자원 분배

여러 개의 어플리케이션이 동시에 실행되는 환경에서는 운영체제(OS)가 역할을 수행하고 있습니다. OS는 작업 스케줄러를 통해 균등하게 혹은 우선순위에 따라 어플리케이션 속 쓰레드들에게 CPU 시간을 배분합니다. 이는 공평성을 기하려는 노력일 수 있지만, 각 OS와 스케줄링 정책에 따라 다르게 적용될 수 있습니다.

  • CPU 코어 최적화: 특정 프로그램(예: 웹 애플리케이션)만 고려해서 최적화한다면, 다른 프로그램들도 CPU를 사용하게 되면서 이론적 최적화는 다소 불완전할 수 있습니다. 따라서 어떤 환경에서 실행될지를 고려하여 최적화 설계가 필요합니다.

  • 쓰레드 수에 따른 CPU 스케줄링: 일반적으로 특정 앱이 많은 쓰레드를 가질수록 CPU 사용 빈도가 증가할 수 있지만, 이 역시 OS의 스케줄러 정책에 의해 결정됩니다. 모든 어플리케이션이 CPU 자원을 공평하게 나눌 수 있도록 조정됩니다. 직접 쓰레드 수에 비례한 CPU 사용 빈도 증가를 보장하지는 않습니다.

이와 관련된 다른 질문들도 도움이 될 수 있습니다. 링크를 참고해서 더 깊이 있는 이해를 높여 보시면 좋겠습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

writer0713님의 프로필 이미지
writer0713

작성한 질문수

질문하기