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

hylim님의 프로필 이미지
hylim

작성한 질문수

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

사용자 모드 & 커널 모드

커널 모드 전환시 질문이 있습니다!

작성

·

40

·

수정됨

0

안녕하세요 선생님,

강의 잘 듣고 있습니다!

 

강의 중 궁금한 점이 있어서 질문드립니다.. ㅎㅎ

 

  1. 커널모드로 전환 시 시스템 콜과 응용 프로그램 사이에 라이브러리라고 표기가 되어있던데, 자바일 경우 JNI를 의미하는 것이 맞으실까요??..

 

  1. 병렬 스트림 사용에 대한 예시를 구글링 해보면, 따로 스레드 풀을 생성해서 만들지 않을 경우, 하나의 common 스레드 풀을 공유하여 사용해 스레드가 부족하게 될 경우를 대비해, 따로 별도의 포크조인 스레드 풀을 생성하라는 가이드가 많은데요,

무분별하게 스레드 풀을 많이 생성했을 경우에 생기는 문제점들이 어떤 것이 있을지 알 수 있을까요?..

 

i/o가 잦은 프로세스에서 스레드의 개수가 많아 스레드들간의 컨텍스트 스위칭이 많은 경우에는 메모리 점유 외에 프로세스 성능에 크게 영향을 주지 않을 것이라고 생각 중이지만 다른 사이드 이펙트가 있을까 하여 질문 드립니다!

 

감사합니다 :)

 

답변 1

0

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

hylim님의 궁금증에 대해 답변드리겠습니다.

  1. 커널모드로 전환 시 시스템 콜과 응용 프로그램 사이에서 이루어지는 작업을 말씀해주신 것처럼 자바에서는 주로 JNI(Java Native Interface)를 통해 이루어집니다. JNI는 자바 코드 내에서 네이티브 코드(예: C, C++)를 호출할 수 있는 인터페이스를 제공하여, 자바 애플리케이션과 네이티브 애플리케이션이 상호 작용할 수 있게 해줍니다. 따라서 커널 모드 전환 시 A JNI를 통해 운영체제의 시스템 콜을 사용하는 것이 맞습니다.

  2. 스레드 풀을 무분별하게 많이 생성했을 때 발생할 수 있는 문제점으로는 다음과 같은 것들이 있습니다:

    • 메모리 오버헤드: 각 스레드는 자신의 스택 메모리를 가지고 있기 때문에 스레드가 많아질수록 그만큼 메모리 사용량도 증가하게 됩니다.
    • 컨텍스트 스위칭 비용 증가: 스레드의 수가 많아지면 CPU는 스레드 간 컨텍스트를 자주 전환해야 합니다. 이러한 컨텍스트 스위칭은 오버헤드를 발생시키므로 시스템의 전반적인 성능 저하를 일으킬 수 있습니다.
    • 자원 경쟁: 스레드가 많아질 경우, 공유 리소스(예: 데이터베이스 연결)에 대한 경쟁이 심화되어 성능 병목 현상이 발생할 수 있습니다.

즉, 스레드 풀을 과도하게 사용하면 메모리 점유량 증가, 컨텍스트 스위칭으로 인한 성능 저하, 자원 경쟁으로 인한 병목 현상 등 여러 부정적인 사이드 이펙트가 발생할 수 있으므로 스레드 풀의 크기와 사용을 신중하게 계획해야 합니다.

I/O가 잦은 프로세스의 경우, 스레드 개수 관리는 특히 더 중요할 수 있습니다. I/O 작업은 대체로 CPU 작업보다 시간이 더 소요되기 때문에, 적절한 수의 스레드를 유지하며 I/O와 CPU 작업을 효율적으로 분배하는 것이 중요합니다.

추가적인 정보가 필요하시면 항상 도움을 드리겠습니다. 감사합니다 :)

hylim님의 프로필 이미지
hylim

작성한 질문수

질문하기