Я обнаружил, что моя программа Akka Streams неожиданно использовала процессор.
Вот простой пример:
import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Sink, Source}
implicit val system: ActorSystem = ActorSystem.create("QuickStart")
implicit val materializer: ActorMaterializer = ActorMaterializer()
Source.repeat(Unit)
.to(Sink.ignore)
.run()
Приведенный выше фрагмент кода позволит запускать исходные тексты и приемники втот же актер.
Он использует около 105% загрузки процессора на моем ноутбуке.Работает, как и ожидалось.
И после того, как я добавил асинхронную границу:
import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Sink, Source}
implicit val system: ActorSystem = ActorSystem.create("QuickStart")
implicit val materializer: ActorMaterializer = ActorMaterializer()
Source.repeat(Unit)
.async // <------ async boundary here
.to(Sink.ignore)
.run()
Этот фрагмент кода теперь будет использовать около 600% загрузки ЦП на моем ноутбуке 4c8t.
Я ожидал, добавив асинхронную границу, этот поток будет работать в 2 отдельных субъектах и будет стоить чуть более 200% процессорного времени.Но это стоит намного больше, чем 200%.
Что может заставить асинхронную границу использовать столько ресурсов ЦП?