
Alexander
06.10.2018
13:19:55
Вообще какой-то страшный код. Передача мутабельного состояния в корутины... Может оно и можно, но как-то боязно так делать.

Алексей
06.10.2018
13:20:31
а там каждый раз мы передаём для работы разные части массива (точнее обрабатываются везде разные части)
так что тут это безопасно

Alexander
06.10.2018
13:23:45
Я не понимаю пока, почему оно циклится, но вообще способ избежать проблем простой: объявляется в основном launch головной job пустой, а потом он у всех наследников указывается родителем. Потом мы его отменяем в конце и все завершается. Новые корутины по-моему по-умолчанию такой джоб делают сами, я пока не игрался.

Google

Алексей
06.10.2018
13:24:33
но понял
попробую с родителем общим
правду тут есть нюанс...
а где тогда вызывать ожидание?
в main это всё равно не выйдет - он не suspend

Alexander
06.10.2018
13:26:36
Там же где VM убивается в предыдущем случае

Алексей
06.10.2018
13:26:39
в runBlocking?
так, стоп:D а время мне тогда как засекать?:D

Alexander
06.10.2018
13:27:38
Ну это не знаю. Я бы сказал, что снаружи от ranblocking

Алексей
06.10.2018
13:28:12
ок

Alexander
06.10.2018
13:28:25
Но вообще, тут что-то не так. Не должно оно подвисать

Google

Алексей
06.10.2018
13:30:35
а я понял, в чём проблема
sort возвращает Job, создавая launch, а внутри этого launch мы создаём другой launch над sort
получаем launch { launch { ... } }

Marina
06.10.2018
13:33:21
Не знаю в чем дело, но странно, внутренние лаунч ты ждёшь, а родительскую нет

Алексей
06.10.2018
13:33:49

Mikhail
06.10.2018
13:34:48

Алексей
06.10.2018
13:35:28
в итоге там, где последовательно получалось 15 мс, сейчас получается 200-450 мс, там, где 25 мс - сейчас 200-500 мс
То есть по-сути, получается, что после сортировки своей части функция вызывается рекурсивно для правой и левой части в launch для каждой части и ожидает их завершения. По какой-то причине, это работает дольше последовательного алгоритма

Жабра
06.10.2018
13:38:56
Хотя не, нужно изменять алгоритм

Алексей
06.10.2018
13:39:37

Жабра
06.10.2018
13:39:46
?
Адаптировать его под многопоточность

Алексей
06.10.2018
13:39:55
каким образом?

Жабра
06.10.2018
13:41:28
Ну, первое что приходит на ум: сделать дно распараллеливания примерно тогда, когда в массиве осталось не более 10 элементов. Ибо в массиве с 4000 элементами, 2000 раз создастся Job для двух элементов + 1000 раз для четырех и так далее.
Нужно найти тот момент, когда эффективнее будет обработать маленький массив последовательно

Алексей
06.10.2018
13:42:14
Хорошо, я посмотрю

Жабра
06.10.2018
13:42:30

Алексей
06.10.2018
13:42:37

Google

Farid
06.10.2018
14:41:01
Привет всем. Ребят, сори за глупый вопрос. Как *установить* Volley в проект android studio? Kotlin
В C# это решалось элементарно, NuGet'ом

OlegKrikun
06.10.2018
14:41:48

Farid
06.10.2018
14:42:22
Сюда?

OlegKrikun
06.10.2018
14:42:36
и ваще тебе в @kotlin_mobile

Farid
06.10.2018
14:43:04

Владислав
06.10.2018
14:43:08
Да

OlegKrikun
06.10.2018
14:43:32

Владислав
06.10.2018
14:46:42
а тьфу, это не тот файл, да

Alexander
06.10.2018
15:59:52

Алексей
06.10.2018
16:27:40

Алексей
06.10.2018
16:28:21
Потому что я по-всякому пытался его распараллелить (только принцип чет-нечетной сортировки не пробовал) - получается дольше

Alexander
06.10.2018
16:28:28
Не совсем. Там основная стоимость будет на хвосте, именно поэтому надо ввести минимальный кусок

Алексей
06.10.2018
16:28:29
Хотя я грешу на кривые руки
Минимальный кусок я вычислял как корень из размера массива, чтобы не плодить миллион корутин на одну сортировку

Alexander
06.10.2018
16:29:25
Но вообще, этот алгоритм очень плохо параллелится. Он всего двойку дает.

Алексей
06.10.2018
16:29:30
Потом ввел максимальную глубину корутины

Google

Жабра
06.10.2018
16:31:53

Alexander
06.10.2018
16:34:54
Я вообще не вижу, как алгоритмы сортировки можно сделать параллелизуемыми. Там всегда будет какое-то мутабельное состояение.

Алексей
06.10.2018
16:36:21
Вопрос только в стоимости создании корутины

Quantum Harmonizer
06.10.2018
16:37:00

Alexander
06.10.2018
16:37:05
Я пока не вижу выигрыша больше двойки

Admin
ERROR: S client not available

Alexander
06.10.2018
16:37:24

Quantum Harmonizer
06.10.2018
16:37:34
да, только так

Alexander
06.10.2018
16:38:01
Ну это будет работать, но удобнее делать на стримах
Хотя в принципе на корутинах делается то же самое

Алексей
06.10.2018
16:39:37
Я пока для работы с асинхронщиной взял только задачу с изображением - выделить независимые куски в изображении. Независимый кусок тут - это отделенный от остальных прозрачным пространством. Конфликты тут могут быть только на стыках рабочих частей картинки, но решаются они очень просто.
Помимо сортировки, которая не удалась

Alexander
06.10.2018
16:41:47
Путаете асинхронность и параллельность. В данном случае это можно сделать параллельным, но опять же это больше для параллельных стримов задача

Алексей
06.10.2018
16:42:00
Что еще такого рода можно придумать?

Alexander
06.10.2018
16:43:27
Это вообще не связанные вещи. Асинхронность это про том, что работа производится вне асновного потока и дергает основной поток, когда завершена. Ваш код для сортировки параллельный, но при это полностью синхронный

Алексей
06.10.2018
16:44:06
Понял
Тогда правильнее сказать параллельные задачи

Alexander
06.10.2018
16:45:21
Да, и для них корутины не всегда имеют преимущества над тредами

Google

Алексей
06.10.2018
16:46:38
Может, есть такая на примете?

Alexander
06.10.2018
16:55:42
Если она безболезненно бьется на независимые подзадачи. Интегрирование любого рода
На кластерах любят word count брать в качестве примера

Алексей
06.10.2018
17:02:01

Alexander
06.10.2018
17:02:20
Да, и букв

Алексей
06.10.2018
17:04:26
Сохранил как вариант:)
Спасибо за помощь

ISkylake
06.10.2018
17:37:07
Кто уже 1.3 тестил в связке с JDK 11?

Alexandr
06.10.2018
18:13:20

OlegKrikun
06.10.2018
18:21:40

Alexandr
06.10.2018
18:43:19

Quantum Harmonizer
06.10.2018
18:55:47

Жабра
06.10.2018
19:36:57
Так UI депрекейтнули ж.?

Quantum Harmonizer
06.10.2018
19:37:17
Использую библиотеку, которая скомпилирована с экспериментальными корутинами.

Жабра
06.10.2018
19:37:44
Понятно.)