配置Akka中的最大线程数Http无法按预期工作

时间:2016-01-29 12:14:21

标签: multithreading scala akka dispatcher akka-http

我正在尝试使用akka-http测试我的应用程序,它接收POST发送的一些json并用它们做一些事情。我正在尝试提高我的http路由可以处理的最大线程数。为了测试这个,我把Thread.sleep放在一个基本路线中。我期待的是路由最多处理“parallelism-max”POST请求,直到它因为缺少线程而阻塞。

让我用以下例子解释:

当我的程序启动时,我使用以下代码创建ActorSystem:

system = ActorSystem("foo", ConfigFactory.load())

我定义了隐式材质化器(类型为ActorMaterializer):

implicit lazy val materializer: ActorMaterializer = ActorMaterializer(ActorMaterializer().settings.withDispatcher("akka.actor.dispatcher-fork"))

我创建自己的调度程序以便以这种方式控制线程数:

akka {
  actor {
    dispatcher-fork {
      type = "Dispatcher"
      executor = "default-executor"
      default-executor {
        fallback = "fork-join-executor"
      }
      fork-join-executor {
        parallelism-min = 2
        parallelism-factor = 3.0
        parallelism-max = 20
        task-peeking-mode = "FIFO"
      }
    }
  }
}

我处理我的数据:

val basicRoute = 
  post{
    complete {
      logger.info("hey: " + Thread.currentThread().getId)
      Thread sleep 60000 //Let the threads sleep to see how many of them I can have
      StatusCodes.Accepted -> None // Body none
    }
  }

这是日志的状态:

      Starting Akka...
  Running Akka 2.4.1
   INFO  c.t.b.app.App$ Listening on 0.0.0.0:2554
  Successfully started Akka
   INFO  c.t.b.app.App$ hey: 70
   INFO  c.t.b.app.App$ hey: 73
   INFO  c.t.b.app.App$ hey: 75
   INFO  c.t.b.app.App$ hey: 72
   INFO  c.t.b.app.App$ hey: 77
   INFO  c.t.b.app.App$ hey: 74

如果我发送更多POST请求,直到我的某些线程唤醒并完成其处理,则没有任何反应。

我试图更改此参数:

parallelism-min = 2
parallelism-max = 20

到这些:

parallelism-min = 1
parallelism-max = 2

它按预期工作(在块之前只接收2条消息)。

为什么第一种情况不起作用?

提前感谢您的帮助。

PS:这些是我正在使用的版本:

Akka Version = 2.4.1
Akka Stream And Http Version = 2.0.2

我已经检查过的资源:

http://doc.akka.io/docs/akka/current/scala/dispatchers.html  http://doc.akka.io/docs/akka/current/general/configuration.html

编辑: 使用的CPU是英特尔®酷睿™i7-4790S CPU @ 3.20GHz×8,因此使用超线程的4个物理内核(8个逻辑内核)。

0 个答案:

没有答案