Akka / futures - Akka решает, стоит ли использовать текущий поток или диспетчер? - PullRequest
2 голосов
/ 16 сентября 2011

В настоящее время я думаю об использовании Akka (API / библиотек Java) для выполнения задачи создания нескольких Future и помещения их в BlockingQueue. Теперь может случиться так, что некоторые задачи, которые обрабатываются Callables, быстрее / быстрее выполняются в вызывающем потоке, вместо того, чтобы создавать новый поток или ожидать появления нового потока. Я думаю, что Akka делает именно это, например, если я бегу:

Future<String> f1 = future(new Callable<String>() {
                  public String call() {
                      return "Hello" + "World";
                  }
              });

Это может быть выполнено в текущем потоке, который вызывает будущее (Callable), или я ошибаюсь? Возможно, я ошибаюсь, потому что не понимаю, как диспетчер решит, будет ли создан новый поток или нет.

Прямо сейчас я просто использую ExecutorService, который использует другие потоки, но поскольку некоторые задачи действительно очень быстрые, они также могут быть обработаны текущим потоком. Но я использую BlockingQueue<Future<Float>>, поэтому иногда я не могу использовать Future, а иногда нет.

С наилучшими пожеланиями,
Johannes

1 Ответ

2 голосов
/ 16 сентября 2011

Всегда используется поток из предоставленного диспетчера или глобальное значение по умолчанию, если никто не указан. Чтобы использовать тот же поток, вам нужно передать CallingThreadDispatcher, но тогда он всегда будет синхронным. Никто, кроме программиста, не может решить, дешевое вычисление или нет.

...