2015-03-11 2 views
6

Чтение исходного кода scala для scala.concurrent.Future и scala.concurrent.impl.Future, кажется, что каждая будущая композиция через map отправляет новую задачу для исполнителя. Я предполагаю, что это обычно запускает контекстный переключатель для текущего потока и/или назначение потока для задания.Scala фьючерсы и потоки

Учитывая, что потоки функций должны проходить вокруг Фьючерсов между ними, чтобы воздействовать на результаты фьючерсов без блокировки (или без вникания в спагетти обратного вызова), разве эта «реактивная» парадигма очень дорога на практике, когда код хорошо написан модульным способом, где каждая функция только делает что-то маленькое и переходит к другим?

+0

Yup it ... но он должен быть «реактивным» и не обязательно «оптимизированным по производительности». –

+3

Подход, принятый стандартной библиотекой в ​​этом отношении, является дизайнерским решением и контрастирует с реализацией фьючерсов на Twitter, которая оптимизирована для сходства потоков - см., Например, [это сообщение Finaglers] (https://groups.google.com/d/msg/finaglers/yWOr7-7CmPw/TBsJenqynQQJ) для обсуждения. –

+0

Возможно, @TravisBrown будет вырезать/вставить это в поле «Ваш ответ». По модулю его стандарты невероятно высоки. Но его комментарий - более длинный, чем предыдущий. –

ответ

2

Это зависит от контекста выполнения. Таким образом, вы можете выбрать стратегию.

Вы, исполнитель, можете просто сделать это в вызывающем потоке, сохраняя карты-вызовы в одном потоке. Вы можете передать свою собственную стратегию, явно передав контекст выполнения или использовать неявное.

Сначала я проверил, что делает пул fork/join по умолчанию, регистрируя, какой поток был использован. В новых версиях Afaik иногда используется подающая нить. Тем не менее, я не знаю, используется ли это/применяется для будущих обратных вызовов scala.

+0

Забота о предоставлении примера безопасного вывода такого исполнителя ??! _ «регистрация, в которой была использована нить» _ также может быть приятной, если бы ее было просто выполнить или просто любопытство .... – matanster

Смежные вопросы