4월 1일 -Thread Pool, Monitor, Fork-Join

Yullgiii·2024년 4월 1일
0
post-thumbnail

Thread Pool

Thread Pool은 사전에 생성된 스레드의 집합이며, 작업을 실행하기 위해 재사용되는 스레드들을 관리한다. 이 방식은 새로운 작업을 위해 매번 스레드를 생성하고 소멸시키는 오버헤드를 줄여준다. 작업이 발생하면, Thread Pool에서 사용 가능한 스레드가 작업을 처리하고, 작업 완료 후 다시 Pool에 반환되어 다른 작업을 기다린다. Thread Pool은 동시성 레벨을 조절하고, 리소스를 효율적으로 사용하며, 시스템의 부하를 관리하는 데 유용하다.

Thread Pool 스레드 수 결정 기준

Thread Pool에서 스레드 수를 결정할 때 고려해야 할 기준은 다음과 같다:

  • 하드웨어 자원: 사용 가능한 CPU 코어 수는 Pool의 스레드 수를 결정하는 데 중요한 요소이다. 일반적으로 CPU 코어 당 하나 또는 그 이상의 스레드를 할당하는 것이 좋다.
  • 작업의 종류: CPU 집약적인 작업이면 CPU 코어 수에 맞추는 것이 좋다. I/O 집약적인 작업의 경우, 대기 시간으로 인해 더 많은 스레드를 할당할 수 있다.
  • 시스템의 부하: 시스템에 미치는 전반적인 부하를 고려해야 한다. 너무 많은 스레드는 컨텍스트 스위칭으로 인한 오버헤드를 증가시킬 수 있다.
  • 응답 시간과 처리량: 응답 시간을 최소화하고 처리량을 최대화하는 스레드 수를 찾아야 한다. 실험을 통해 최적의 스레드 수를 찾는 것이 이상적이다.

Monitor

Monitor는 동시에 실행되는 스레드들 사이의 상호 작용을 안전하게 관리하기 위한 동기화 메커니즘이다. Monitor 내부의 모든 메소드는 동시에 하나의 스레드만이 접근할 수 있도록 보장한다. 이는 메소드 또는 코드 블록에 대한 뮤텍스 락을 자동으로 관리함으로써, 공유 자원에 대한 동시 접근을 제어한다. 자바에서는 synchronized 키워드를 사용하여 메소드나 코드 블록을 Monitor로 만들 수 있다.

Fork-Join

Fork-Join은 병렬 프로그래밍을 위한 프레임워크로, 큰 작업을 작은 작업으로 분할하고(분기), 그 결과를 합쳐(결합) 최종 결과를 도출하는 패턴을 기반으로 한다. 이 패턴은 재귀적으로 작업을 분할하여, 작은 작업들을 병렬로 실행한 후 그 결과를 합치는 방식으로 작동한다. Fork-Join 프레임워크는 작업 도둑질(Work Stealing) 알고리즘을 사용하여, 다른 스레드가 완료된 작업을 기다리지 않고 남은 작업을 가져와 처리함으로써 프로세서의 유휴 시간을 최소화한다. 자바에서는 java.util.concurrent 패키지의 ForkJoinPool 클래스를 사용하여 Fork-Join 프레임워크를 구현할 수 있다.

데이터 정렬 전략

데이터를 정렬할 때 안전성과 성능을 모두 고려하는 전략은 다음과 같다:

  • 알고리즘 선택: 안정성과 성능을 모두 고려할 때, 퀵 정렬, 병합 정렬, 힙 정렬 등이 좋은 성능을 제공한다. 병합 정렬은 안정 정렬이며 대규모 데이터셋에 적합하고, 퀵 정렬은 평균적으로 빠른 성능을 보이지만 최악의 경우 성능 저하가 있을 수 있다.
  • 병렬 처리: 대용량 데이터의 경우, 병렬 정렬 알고리즘을 사용하는 것이 좋다. 병렬 병합 정렬이나 Fork-Join 프레임워크를 사용한 정렬은 여러 스레드를 활용하여 정렬을 수행함으로써 성능을 크게 향상시킬 수 있다.
  • 외부 정렬: 메모리에 담을 수 없는 매우 큰 데이터셋의 경우, 외부 정렬 기법을 사용한다. 외부 정렬은 데이터를 여러 덩어리로 나누어 각각을 정렬한 다음, 정렬된 덩어리들을 병합하는 방식으로 작동한다.
  • 알고리즘 최적화: 데이터의 특성(예: 거의 정렬된 데이터, 반복된 값이 많은 데이터 등)을 고려하여 특정 알고리즘을 선택하거나 최적화할 수 있다. 거의 정렬된 배열에는 삽입 정렬이 매우 효율적일 수 있다.

안전하면서도 좋은 성능을 내기 위해서는 데이터의 특성, 사용 가능한 자원, 그리고 성능 요구사항을 종합적으로 고려하여 적절한 정렬 전략을 선택해야 한다. 경우에 따라, 여러 전략을 결합하거나 조정해야 할 수도 있다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글