
Bogdan
21.01.2018
22:21:50
корунтины решают проблему, потоки -нет
корунтины меньше стоят чем потоки
код с корунтинами, может (подчеркиваю!) выглядеть красивей\читабелней чем с потоками

Georgiy
21.01.2018
22:23:03

Google

Georgiy
21.01.2018
22:25:26

Quantum Harmonizer
21.01.2018
22:25:26

Georgiy
21.01.2018
22:26:10

Bogdan
21.01.2018
22:26:54

Anton
21.01.2018
22:27:26
каким образом корутины проблемы синхронизации решают?

Quantum Harmonizer
21.01.2018
22:27:46

Artem
21.01.2018
22:28:03

Quantum Harmonizer
21.01.2018
22:28:32

Bogdan
21.01.2018
22:28:39

Anton
21.01.2018
22:28:50
блокингкью есть и без них

Quantum Harmonizer
21.01.2018
22:29:20

Google

Anton
21.01.2018
22:29:22
чувак говорит что рейскондишен решается корутинами если я правильн понял)

Андрей
21.01.2018
22:29:33
если ты можешь запустить потоки, которые полностю не зависимые друг от друга, то это выглядить странно
Да можно много разных фоновых задач придумать, которые будут работать в своих потоках, не завися от других.
С тем же GUI в джаве уже давно работают, фоновые процессы на другие потоки переносят, результат работы в GUI поток возвращают, и все это не блокирая сам GUI поток.
Примеры можно понаходить для разных GUI API, таких как awt, swt, JavaFX, Android.

Anton
21.01.2018
22:29:45
а разве там под капотом не джавовская блокингкью?

Quantum Harmonizer
21.01.2018
22:30:39

Bogdan
21.01.2018
22:30:44

Quantum Harmonizer
21.01.2018
22:30:45

Anton
21.01.2018
22:30:58
а я почему то так думал(

Georgiy
21.01.2018
22:31:41

Bogdan
21.01.2018
22:32:10
Да можно много разных фоновых задач придумать, которые будут работать в своих потоках, не завися от других.
С тем же GUI в джаве уже давно работают, фоновые процессы на другие потоки переносят, результат работы в GUI поток возвращают, и все это не блокирая сам GUI поток.
Примеры можно понаходить для разных GUI API, таких как awt, swt, JavaFX, Android.
корунтины это не новое, а переосознаное старое, их проще юзать, код более читабельней

Andrew
21.01.2018
22:32:30
На всякий случай -- в случае с UI тяжеловесные действия всё равно должны выполняться в фоновом потоке, потому у вас всё равно корутины будут раскиданы по разным потокам. Стоит таки повникать детальнее в то, о чём они и как они соотносятся с потоками.
я описал конкретную ситуацию с GUI
корунтины решают проблему, потоки -нет

Bogdan
21.01.2018
22:33:34
Корунтины это проще, удобней, меньше ресурсов

Ivan
21.01.2018
22:34:15
ребят, можно тупой немного вопрос:
есть в gradle-kotlin dsl вот такой сеттер
public void setApplicationDefaultJvmArgs(Iterable<String> applicationDefaultJvmArgs) {
this.applicationDefaultJvmArgs = applicationDefaultJvmArgs;
}
вот так
applicationDefaultJvmArgs = [""]
говорит не правильно, а как?

Andrew
21.01.2018
22:35:04
Спасибо, я их смотрел. Корутины не дешевле потоков, когда гарантированно придётся использовать разные потоки. Но всё ещё удобнее, само собой.

Ivan
21.01.2018
22:35:24
причём всякие kotlin.collections.arrayListOf() - а) не доступен и б) ну как-то не очень смотрится

Bogdan
21.01.2018
22:35:40

Ivan
21.01.2018
22:35:56

Bogdan
21.01.2018
22:36:24

Google

Ivan
21.01.2018
22:36:25
создать 2 потока и создать 2 корутины - это вообще как небо и земля

Bogdan
21.01.2018
22:36:38
arrayListOf<String> ()

Ivan
21.01.2018
22:37:17
arrayListOf<String> ()
так я же написал, не доступен сам метод, пакет kotlin.collections в гредл не прокидывается
ну и в целом что-то подсказывает что должен быть другой способ

Bogdan
21.01.2018
22:38:56
Array
пробуй

Ivan
21.01.2018
22:39:43
не, тоже красный

Andrew
21.01.2018
22:39:53
Правильно. Ещё раз -- у нас есть UI-поток, который нельзя надолго блокировать, и есть сложная на процессор операция / синхронный ввод-вывод. сделать это асинхронно на одном потоке у вас не получится, вам в любом случае нужно поднимать фоновый поток из пула. а поверх него разворачивать корутины и синхронизировать её с корутиной в основном потоке. Что именно у вас здесь дешевле выходит?

Bogdan
21.01.2018
22:40:02

Ivan
21.01.2018
22:41:08

Bogdan
21.01.2018
22:41:31
тут я не помогу

Andrew
21.01.2018
22:42:56

Ivan
21.01.2018
22:43:26
как Елизаров завещал

Bogdan
21.01.2018
22:44:04

Andrew
21.01.2018
22:44:26
Ровно об этом я и говорю -- при надобности уйти из UI в бекграунд корутины волшебным образом не делают всё дешевле.

Bogdan
21.01.2018
22:44:43

Google

Andrew
21.01.2018
22:45:10

Bogdan
21.01.2018
22:45:12
я чесно не поню утверждать не буду но примерно так, еще своя память выеляется

Andrew
21.01.2018
22:46:55
вы издеваетесь? 2-4 мг это только стек для потока
Я понять не могу -- у вас есть две корутины, которые выполняются на двух разных потоках -- одна в UI, вторая в CommonPool -- у вас и между ними переключение бесплатное просто потому, что они корутины?

Ivan
21.01.2018
22:46:58

Bogdan
21.01.2018
22:47:13
корунтина это блок кода который может выполнен на любом потоке. Им без разницы

Ivan
21.01.2018
22:48:09

Andrew
21.01.2018
22:48:09

Ivan
21.01.2018
22:48:43
я бы просто понял если была бы 1 корутина и 2 потока
или наоборот
но в целом да, переключение там фигня же, как засабмитить таску в Excecuter

Bogdan
21.01.2018
22:50:16
не, волшебным образом дешевле не сделают, если у вас все вызовы только блокирующее IO, но это же вряд ли так. Если нет, то можно выделить в отдельный пулл всё блокирующее, с которыми ничего не сделаешь, отвести под них пулл, а остальное удешевлять уже
об это говорилось в докладе, не конкретно про этот случай, обговариловалось такие блокировки, но товарищь все смотрел

Ivan
21.01.2018
22:51:20
а дальше что-то вроде "товарищ Executer продолжи вот этот блок кода с такой-то чиселки, а там блок кода - это свитч от этого числа"

Bogdan
21.01.2018
22:51:33

Andrew
21.01.2018
22:51:47
Так, давайте ещё раз -- Богдан отметил, что корутины лучше и дешевле, чем потоки, я отметил, что в случае с необходимостью выполнить блокирующую операцию всё равно будет CommonPool и затраты на переключение потоков, потому волшебства нету и нету безусловного "дешевле". О чём спор, раз тут все такие умные, что сарказмом разбрасываются?

Bogdan
21.01.2018
22:51:48

Ivan
21.01.2018
22:52:56

Bogdan
21.01.2018
22:53:36

Andrew
21.01.2018
22:53:38
Не обязательно, конечно. Всё ещё другой поток, откуда он возьмётся -- CommonPool, свой экзекьютор -- не важно.

Google

Bogdan
21.01.2018
22:54:17

Andrew
21.01.2018
22:54:21

Ivan
21.01.2018
22:54:34
и про затраты на перелючение - тут всё-равно не понял, вызывается блокирующий метод, блокирует поток, в пулле -1, как только закончил продолжил выполнять следующий код в том же потоке

Bogdan
21.01.2018
22:55:56

Andrew
21.01.2018
22:57:39

Bogdan
21.01.2018
22:58:15
new Future новый обект
лямба новый обект
в случае с корунтинами там меншь

Ivan
21.01.2018
22:58:54

Bogdan
21.01.2018
22:58:59
псали же конечный автомат
я пока в коде не ковырялся
но да если слишком много корунтин, даже которые ничего не блочат

Ivan
21.01.2018
23:00:47

Bogdan
21.01.2018
23:00:52
это может замедить
сорян