Skip to content

Latest commit

 

History

History
33 lines (21 loc) · 1.8 KB

80. 스레드보다는 실행자, 태스크, 스트림을 애용하라.md

File metadata and controls

33 lines (21 loc) · 1.8 KB

스레드보다는 실행자, 태스크, 스트림을 애용하라

실행자 프레임워크 (Excutor Framework)

  • 클라이언트가 요청한 작업을 백그라운드 스레드에 위임해서 비동기적으로 처리하는 작업 큐(work cue)를 간단하게 할 수 있는 프레임워크
        // 실행자 생성
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        
        // 실행자에 실행할 태스크를 넘기는 방법
        executorService.execute(runable);
        
        // 실행자 종료
        executorService.shutdown();
  • 실행자 서비스(스레드풀)의 개수는 고정할 수도 있고 필요에 따라 늘어나거나 줄어들게 설정할 수도 있다.
  • 보통 java.util.concurrent.Executors 의 정적 팩토리를 사용하면 원하는 실행자를 만들고 스레드를 할당하여 일하게 할 수 있다.

실행자를 사용하면 작업단위(태스크)와 실행 매커니즘(실행자 서비스)을 분리시킬 수 있다.

태스크 수행을 실행자 서비스에 맡기면서 원하는 태스크 수행 정책을 선택할 수 있고, 생각이 바뀌면 언제든 변경할 수 있다.

몇가지 실행자 서비스에 대한 설명

  • Excutors.newCachedThreadPool
    • 작은 프로그램이나 가벼운 서버에서 사용하기 좋은 실행자.
    • 특별히 설정할게 없고 일반적인 용도에 적합하다.
    • 하지만 가용할 스레드가 없다면 스레드를 새로 하나 생성한다는 특성 때문에 스레드 개수가 고정된 무거운 프로덕션 서버에는 적합하지 않다.
  • "포크 조인 풀" 이라는 특별한 실행자 서비스는 "포크 조인 태스크" 를 수행하는데 이를 사용하면 스레드와 CPU 를 최대한 활용하면서 연산을 처리 한다.