작성
·
40
·
수정됨
0
안녕하세요 선생님,
강의 잘 듣고 있습니다!
강의 중 궁금한 점이 있어서 질문드립니다.. ㅎㅎ
커널모드로 전환 시 시스템 콜과 응용 프로그램 사이에 라이브러리라고 표기가 되어있던데, 자바일 경우 JNI를 의미하는 것이 맞으실까요??..
병렬 스트림 사용에 대한 예시를 구글링 해보면, 따로 스레드 풀을 생성해서 만들지 않을 경우, 하나의 common 스레드 풀을 공유하여 사용해 스레드가 부족하게 될 경우를 대비해, 따로 별도의 포크조인 스레드 풀을 생성하라는 가이드가 많은데요,
무분별하게 스레드 풀을 많이 생성했을 경우에 생기는 문제점들이 어떤 것이 있을지 알 수 있을까요?..
i/o가 잦은 프로세스에서 스레드의 개수가 많아 스레드들간의 컨텍스트 스위칭이 많은 경우에는 메모리 점유 외에 프로세스 성능에 크게 영향을 주지 않을 것이라고 생각 중이지만 다른 사이드 이펙트가 있을까 하여 질문 드립니다!
감사합니다 :)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
hylim님의 궁금증에 대해 답변드리겠습니다.
커널모드로 전환 시 시스템 콜과 응용 프로그램 사이에서 이루어지는 작업을 말씀해주신 것처럼 자바에서는 주로 JNI(Java Native Interface)를 통해 이루어집니다. JNI는 자바 코드 내에서 네이티브 코드(예: C, C++)를 호출할 수 있는 인터페이스를 제공하여, 자바 애플리케이션과 네이티브 애플리케이션이 상호 작용할 수 있게 해줍니다. 따라서 커널 모드 전환 시 A JNI를 통해 운영체제의 시스템 콜을 사용하는 것이 맞습니다.
스레드 풀을 무분별하게 많이 생성했을 때 발생할 수 있는 문제점으로는 다음과 같은 것들이 있습니다:
즉, 스레드 풀을 과도하게 사용하면 메모리 점유량 증가, 컨텍스트 스위칭으로 인한 성능 저하, 자원 경쟁으로 인한 병목 현상 등 여러 부정적인 사이드 이펙트가 발생할 수 있으므로 스레드 풀의 크기와 사용을 신중하게 계획해야 합니다.
I/O가 잦은 프로세스의 경우, 스레드 개수 관리는 특히 더 중요할 수 있습니다. I/O 작업은 대체로 CPU 작업보다 시간이 더 소요되기 때문에, 적절한 수의 스레드를 유지하며 I/O와 CPU 작업을 효율적으로 분배하는 것이 중요합니다.
추가적인 정보가 필요하시면 항상 도움을 드리겠습니다. 감사합니다 :)