Внедрение зависимостей от времени компиляции и одноэлементной платформы для воспроизведения

#scala #dependency-injection #playframework #compile-time

Вопрос:

Я провел рефакторинг своего игрового приложения с использования Guice на использование DI во время компиляции.

В Guice, когда мы не украшаем класс @Singleton , при необходимости может быть создано множество экземпляров.

Во время компиляции DI мы создаем экземпляр, который будет введен один раз, поэтому я думаю, что он эквивалентен одноэлементному.

Мой вопрос в том, потеряю ли я какую-либо производительность, ограничив все только одним экземпляром. Например, если у меня есть экземпляр serviceA с методом doSomething и с учетом того , что все не имеет состояния. Если у меня 32-ядерный процессор и поступает много запросов. Сможет ли Play в контексте DI во время компиляции использовать полную мощность процессора?

Ответ №1:

AFAiK Guice (и другие платформы runtime DI) по умолчанию не создают синглеты по единственной причине, чтобы быть быстрее при создании экземпляров и упростить сложный (потенциально циклический) график зависимостей. Их цель — начать быстрее.

Наличие у вас 1 или 2 экземпляров ServiceA не повлияет на производительность использования этих экземпляров после их создания.

Теоретически даже лучше иметь синглеты.

Комментарии:

1. Спасибо, что прояснили это для меня.