Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 И снова скала немного многопоточки  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
Собссно вопрос, как правильно сделать

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

у меня всё это вылетает скажем так, параллельно это круто, но сторонний сервис валится типа ту мени реквестс. да и мне столько не надо.

ну и вопрос, как мне заставить эти футуры выстреливать порционно. хотя бы.
я могу впилить Thread.sleep(t) внутрь форыча и будет то, что я хочу. Но мне что-то подсказывает, что есть более правильное решение.
25 мар 19, 09:44    [21842439]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT
сторонний сервис (который тоже футуру возвращает)
http сервис что возвращает?
25 мар 19, 09:49    [21842445]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
    repository.findAllBySomeAttrs(Seq(attrA, attrB)).map {
      _.foreach { res => someService.inquiry(res.data) }
    }


вот вот это вот:
someService.inquiry(res.data)
возвращает футуру и фигачит мешок потоков в параллели которые параллельно же долбятся на удаленный сервис.

форыч можно заменить на мап если сильно жгет что возвращает юнит
25 мар 19, 09:53    [21842451]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
Petro123
andreykaT
сторонний сервис (который тоже футуру возвращает)
http сервис что возвращает?

он возвращает какой-то объект который кладется в базу. или не кладется если не возвращает.

это задание для шедулера.
25 мар 19, 09:53    [21842452]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Future должна предоставить тебе готовый результат. Если тебе еще надо куда-то сходить
чтобы его уточнить - то это хреновый Future и неправильно ты задизайнил.
25 мар 19, 11:17    [21842534]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
мне от футуры вообще ничего не надо. мне надо чтоб у меня всё исполнилось в одном потоке последовательно вот и всё.
25 мар 19, 11:46    [21842562]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Капец ты противоречивый Определись что тебе. Мультипоточка или event-driven.
25 мар 19, 11:52    [21842568]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT
мне от футуры вообще ничего не надо. мне надо чтоб у меня всё исполнилось в одном потоке последовательно вот и всё.
foreach в одном потоке
25 мар 19, 12:04    [21842593]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT
у меня есть вызов, он возвращает лист футур
чем плохо в одном потоке синхронно ждать результаты сервиса?
25 мар 19, 12:06    [21842598]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
betelgeizex
Member

Откуда:
Сообщений: 60
https://notepad.mmakowski.com/Tech/Scala Futures on a Single Thread

это не оно?
25 мар 19, 12:46    [21842674]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
забыл ник
Member

Откуда:
Сообщений: 2816
betelgeizex
https://notepad.mmakowski.com/Tech/Scala Futures on a Single Thread

это не оно?

Правильно. Для выполнения Future у тебя должен быть ExecutionContext, по дефолта это форкджойн пул, тебе надо создать однопоточный экзекьютор. ExecutionContext это Аля паттерн стратегия для многопоточных вычислений в скала.
А по православному надо взять Task из scalaz или monix или zio. А код должен ожидать некую монаду, описывающую вычисления, так ты сможешь не только описать стратегию, но и вызвать выполнение когда угодно и даже резать код. В случае future исполнение начинается сразу и ты не сможешь их реюзать
25 мар 19, 20:26    [21843147]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
При слове "монада" никому не стало плохо в аудитории?

Это знаешь как прийти в ПТУ и электро-механикам читать лекцию о квантовой механике :)) Ну правда зачем?
25 мар 19, 20:48    [21843177]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
Тебе жалко штоле пусть будет монада. Говори проще просто. Монада это такая обёртка вокруг объекта которая даёт тебе выстраивать некую последовательность действий. Вот и все. Или ты думаешь что в ПТУ только отсталые учатся?
25 мар 19, 22:52    [21843251]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
Petro123
andreykaT
у меня есть вызов, он возвращает лист футур
чем плохо в одном потоке синхронно ждать результаты сервиса?

Ты про асинк авайт? Или про онкомплит? Онкомплит да, тут всё решает. Ну почти. У тебя может запустить шедулер мешок задач и они будут бежать параллельно. Впрочем это лучше чем фейерверк потоков в любом случае. Как сделать чтоб шедулер не смог запустить таску ещё раз пока все активности предыдущей не закончились я пока не откопал
25 мар 19, 22:56    [21843255]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
fixxer
Member

Откуда:
Сообщений: 711
Petro123
andreykaT
у меня есть вызов, он возвращает лист футур
чем плохо в одном потоке синхронно ждать результаты сервиса?


Ожиданием ты занимаешь поток, который мог бы делом заняться.
25 мар 19, 23:23    [21843275]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fixxer
Ожиданием ты занимаешь поток, который мог бы делом заняться.
правильно. Значит нужно всего лишь два потока, чтобы освободить основной.
Ни 10, ни пять, ни пул потоков. А всего фоновый поток и в нем цикл for к примеру.
Это исходя из ТЗ.
26 мар 19, 06:59    [21843361]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
andreykaT
Тебе жалко штоле пусть будет монада. Говори проще просто. Монада это такая обёртка вокруг объекта которая даёт тебе выстраивать некую последовательность действий. Вот и все. Или ты думаешь что в ПТУ только отсталые учатся?

Ну дай бох.
26 мар 19, 11:03    [21843510]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
короче, сделал актора, всё-равно на плее проект а плей на акке, актор одним концом читает данные из базы в очередь по онкомплиту, набивает очередь, как только очередь набилась, сам себе кидает ивент для того чтоб обработать очередь где она тоже в онкомплите поштучно обрабатывается, а когда обработает, и очередь кончается, шедулит первый ивент через какой-то период времени (аккасистем.шедуле) и снова его кидает и так по кругу. и всё получается в одном потоке. и задачи друг на друга не наслаиваются. правда, мне кажется, что костыль.
26 мар 19, 11:20    [21843529]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT,
Ну если нужна очередность, а не параллельность то все верно.
И очередь тоже лишняя теоретически. Но практически зависит от фреймворка.
26 мар 19, 11:39    [21843551]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Дык тема топика - другая. Это - философия Scala/Play. Надо курить смыслы тамошних фреймворков.
Зачем так сделано. Какие там best-practices.
26 мар 19, 12:00    [21843572]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mayton
Дык тема топика - другая. Это - философия Scala/Play. Надо курить смыслы тамошних фреймворков.
Зачем так сделано. Какие там best-practices.

Согласен.
Но невозможно последовательную задачу делать на акторах и параллельности.
Чтобы "задачи друг на друга не наслаивались")).
Например, есть 50 растров и нужно скачать с сервисов ПАРАЛЛЕЛЬНО. Далее событие на основной поток что все 50 скачаны. Ранее не нужно ничего делать.
26 мар 19, 12:14    [21843584]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Petro123
mayton
Дык тема топика - другая. Это - философия Scala/Play. Надо курить смыслы тамошних фреймворков.
Зачем так сделано. Какие там best-practices.

Согласен.
Но невозможно последовательную задачу делать на акторах и параллельности.
Чтобы "задачи друг на друга не наслаивались")).
Например, есть 50 растров и нужно скачать с сервисов ПАРАЛЛЕЛЬНО. Далее событие на основной поток что все 50 скачаны. Ранее не нужно ничего делать.

Да. Но Андрейка нам поставил задачу в терминах "футуры", "форыч". Что мы можем с этого вынести?
Есть просто его персональные пожелания.
26 мар 19, 12:23    [21843598]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
потому что в плее всё возвращает футуры. ну, практически всё. принтлн не возвращает.
26 мар 19, 12:38    [21843625]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
я читаю с базы - получаю футуру. иду с этими данными на вебклиент - снова получаю футуру. сохраняю результат - и тут футура.
причем вторая не будет работать без данных первой а третья без второй. выходит матрёшка.
26 мар 19, 12:40    [21843627]     Ответить | Цитировать Сообщить модератору
 Re: И снова скала немного многопоточки  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Чортова реактивность....
26 мар 19, 12:43    [21843632]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Java Ответить