Что делает опция конфигурации «throughput-deadline-time»? - PullRequest
0 голосов
/ 05 июня 2018

Я наткнулся на свойство конфигурации throughput-deadline-time для диспетчеров Akka, и оно выглядит как интересный вариант, однако единственное упоминание о нем, которое я мог найти во всей документации, следующее:

  # Throughput deadline for Dispatcher, set to 0 or negative for no deadline
  throughput-deadline-time = 0ms

Я думаю, мы можем согласиться с тем, что это не очень полезно.

Так что же контролирует throughput-deadline-time и какое влияние это оказывает на моего диспетчера?

1 Ответ

0 голосов
/ 05 июня 2018

Итак, я взглянул на исходный код Akka и нашел этот метод в Mailbox, который, кажется, реализует поведение throughput-deadline-time:

/**
 * Process the messages in the mailbox
 */
@tailrec private final def processMailbox(
  left:       Int  = java.lang.Math.max(dispatcher.throughput, 1),
  deadlineNs: Long = if (dispatcher.isThroughputDeadlineTimeDefined == true) System.nanoTime + dispatcher.throughputDeadlineTime.toNanos else 0L):     Unit =
  if (shouldProcessMessage) {
    val next = dequeue()
    if (next ne null) {
      if (Mailbox.debug) println(actor.self + " processing message " + next)
      actor invoke next
      if (Thread.interrupted())
        throw new InterruptedException("Interrupted while processing actor messages")
      processAllSystemMessages()
      if ((left > 1) && ((dispatcher.isThroughputDeadlineTimeDefined == false) || (System.nanoTime - deadlineNs) < 0))
        processMailbox(left - 1, deadlineNs)
    }
  }

Этот фрагмент кода проясняет: throughput-deadline-time задает максимальное количество времени, которое будет потрачено на обработку одного и того же почтового ящика перед переключением на почтовый ящик другого субъекта.

Другими словами, если вы настраиваете диспетчер с помощью:

my-dispatcher {
  throughput = 100
  throughput-deadline-time = 1ms
}

Тогда почтовый ящик участников будет обрабатывать не более 100 сообщений одновременно, в течение не более 1 мс, при каждом достижении первого из этих ограничений Akka переключается на другого субъекта / почтовый ящик.

...