Page History
...
- thread-pool-executor : 각 Task의 완료시간이 비슷할시 유용하다, 빠른 Task가 모두 완료될시 놀고있는 스레드가 생길수가 있다.
- fork-join-executor : 각 Task의 완료시간이 차이가 있을시 유용하다, 놀고 있는 스레드의 자원 가져다가 활용할수있다. 일반적으로 유용하다.
이쯤되면 AKKA는 자바가가진 스레드 스케쥴러를 정확하게 이해하고
이것을 추상화하여 액터 고성능 메시지 처리에서 스레드를 직접 작성할필요가 없으나
자바가가진 스레드 모델이 가진 스케쥴러를 이해할 필요가 있습니다.
어떠한 기능을 추상화한다란것은 전통적인 개발방식의 메카니즘을 잘 이해하고 있다란의미입니다.
Dispatcher Option
parallelism-min =2 : 동시에 활성화되는 최소 스레드수 (available processors * factor)
parallelism-max = 8 : 동시에 활성화되는 최대 스레드수
parallelism-factor =2.0 : Core개수대비 최대가 될수있는 스레드수
throughput =100 : 동시에 처리하는 메시지수
fixed-pool-size =32 : 스레드 개수 고정
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
akka { loggers = ["akka.event.Logging$DefaultLogger"] loglevel = "INFO" stdout-loglevel = "ERROR" } blocking-io-dispatcher { type = Dispatcher executor = "thread-pool-executor" thread-pool-executor { fixed-pool-size = 2 } throughput = 1 } my-thread-pool-dispatcher { # Dispatcher is the name of the event-based dispatcher type = Dispatcher # What kind of ExecutionService to use executor = "thread-pool-executor" # Configuration for the thread pool thread-pool-executor { # minimum number of threads to cap factor-based core number to core-pool-size-min = 2 # No of core threads ... ceil(available processors * factor) core-pool-size-factor = 2.0 # maximum number of threads to cap factor-based number to core-pool-size-max = 10 } # Throughput defines the maximum number of messages to be # processed per actor before the thread jumps to the next actor. # Set to 1 for as fair as possible. throughput = 100 } my-dispatcher { # Dispatcher is the name of the event-based dispatcher type = Dispatcher # What kind of ExecutionService to use executor = "fork-join-executor" # Configuration for the fork join pool fork-join-executor { # Min number of threads to cap factor-based parallelism number to parallelism-min = 2 # Parallelism (threads) ... ceil(available processors * factor) parallelism-factor = 2.0 # Max number of threads to cap factor-based parallelism number to parallelism-max = 10 } # Throughput defines the maximum number of messages to be # processed per actor before the thread jumps to the next actor. # Set to 1 for as fair as possible. throughput = 100 } |
AKKA는 자바가가진 스레드 모델에따른 스케쥴러를 정확하게 이해하고 이것을 추상화하여 성능 튜닝요소로 활용을 합니다.
자동으로 해주는 이것을 믿을수 없다구요? 얼마나 많은 스레드 모델을 이해하고 고성능적으로 안정적으로 구현하였고
다양한 문제를 풀었나? 라고 스스로 점검을 해본다고 하면 , 스레드를 잘다루는 숙련된 개발자를 제외하고
튜닝요소로 분리를 비롯하여 아무것도 못했다란 사실을 알게 됩니다.
동시처리 스레드 제한 예제
Code Block | ||||
---|---|---|---|---|
| ||||
//application.conf 설정 blocking-io-dispatcher { type = Dispatcher executor = "thread-pool-executor" thread-pool-executor { fixed-pool-size = 2 } throughput = 1 } //구현부 //특정 액터 Dispatcher지정 ActorRef testActor = system.actorOf(ext.props("testActor") .withDispatcher("blocking-io-dispatcher"), "service1"); // 동시에 메시지 전송 for(int i=0;i<10;i++) testActor.tell("test message wiht dispatcher",null); |
...