
Quantum Harmonizer
15.01.2018
19:01:58
или очнредь
т. е. TPE из java concurrent — тоже реактивщина?

Alexander
15.01.2018
19:02:01
суть что изменения распространяются автоматически
нет

Igor
15.01.2018
19:02:51

Google

Dumitru
15.01.2018
19:03:05

Alexander
15.01.2018
19:03:07
возможно. тут я не очень компетентен

Dibro
15.01.2018
19:03:34

Alexander
15.01.2018
19:04:16
думаю react + reduce или что там сейчас вместо подходят под определение

Dumitru
15.01.2018
19:04:19

Maxim
15.01.2018
19:05:14
Реактивный и нереактивный подход отличается примерно тем чем игра в пинг понг отличается он перемещения кучи шариков с пункта А в пункт Б. Все взаимодействия двусторонние, и разбиты на отдельные мелкие составляющие.

Alexander
15.01.2018
19:05:31
вот как раз нет
реаетивность не равно запрос ответ

Dibro
15.01.2018
19:05:59

Quantum Harmonizer
15.01.2018
19:06:06

Dumitru
15.01.2018
19:06:25
ок

Bogdan
15.01.2018
19:08:04

Dumitru
15.01.2018
19:09:05

Google

Quantum Harmonizer
15.01.2018
19:12:50

Dumitru
15.01.2018
19:13:51

Quantum Harmonizer
15.01.2018
19:14:10

Dumitru
15.01.2018
19:14:51
?

Dibro
15.01.2018
19:15:50
одно – вебсервер, другое – гуи фреймворк

Dumitru
15.01.2018
19:16:53
Ну типо пишешь гуи на реакте и пишешь сервер на кторе, для того же сайта.

Dibro
15.01.2018
19:18:14
и в чем вопрос?

Dumitru
15.01.2018
19:18:44
Какой тип проекта создать если собрался сделать такой сайт )

Bogdan
15.01.2018
19:19:49
gradle
многомодульный

Dibro
15.01.2018
19:20:10
используй Gradle. один модуль для ктора, другой для реакта, и третий для моделей

Bogdan
15.01.2018
19:21:36

Pavel
15.01.2018
19:49:11
https://youtu.be/G_HZUEY0Qwo

Igor
15.01.2018
20:15:44

Руслан
15.01.2018
20:54:28

Sergey
15.01.2018
21:29:31
http://arrow-kt.io/
немного изврата

Google

Igor
15.01.2018
21:40:11
Да да, в скала чатике по ней уже прошлись ?

Bogdan
15.01.2018
21:42:26

Igor
15.01.2018
21:45:09
Да так поужасались реализации hkt и хранению тайпклассов в глобальной хешмапе.
(впрочем ничего нового, тоже самое было и про kategory)

Pavel
15.01.2018
21:47:13

Igor
15.01.2018
21:48:03

Pavel
15.01.2018
21:48:41

Vic
15.01.2018
21:56:38
KEEP-87 заглох

Глеб
15.01.2018
22:30:31
Привет! У меня простой вопрос по корутинам. Скажем, у меня есть функция loadFileSync(url:String) , и есть массив из url. И я хочу вызвать много loadFileSync() (параллельно) и, дождавшись завершения всех загрузок, продолжить делать дальнейшие дейсвтия:
urls.map {
loadFileSync(it)
}
Наверное, можно заключить эту лямбду в async, а потом для всего этого вызвать много await-ов:
urls.map {
arr += async {loadFileSync(it)}
}
arr.map{it.await()} //а может и не будет работать
А как это сделать правильно?


Руслан
15.01.2018
22:37:51
urls.map { url -> async(CommonPool) { loadFileSync(url) } }.map { it.await() }
получается шедулим все загрузки на CommonPool, обратно получаем Deferred, и потом ожидаем завершения всех.
на самом деле не супер оптимально потому что мы продолжим работу с полученным листом только когда все запросы завершатся, но зато просто и для многих задач подойдет
если хочется прям чтобы очень оптимально, то можно посмотреть работу с каналами тут: https://github.com/tsydd/jprof-ny2018
Немного оффтоп, но наше джава комьюнbити проводило новогодний контест, и там нужно было посчитать кол-во упоминаний слова "java" на сайте сообщества jprof.by.
Так вот из семи вариантов - 2 на котлине, и первое место занял тоже котлин вариант (ссылка выше), а еще он быстрее самого быстрого джавового в 5 раз, хотя либа jsoup была у многих)


Глеб
15.01.2018
22:45:07
Хм, ну мне оно и нужно, в принципе. Я просто почему-то думал, что есть что-то еще более очевидное , чем async/await, с учетом того, что результат loadFileSync не важен. Спасибо, посмотрю ?

Руслан
15.01.2018
22:46:13
ну в любом случае если нужно дождаться - то нужно делать await
можно последний map заменить на forEach
urls.map { url -> async(CommonPool) { loadFileSync(url) } }.forEach {
try {
it.await()
} catch (e: Exception) {
// handle
}
}
и добавить хоть какое-то логгирование, или убрать try/catch и падать в этом месте. но это уже от логики зависит

Andrew
16.01.2018
06:37:27
И не запускать I/O операции на CommonPool, а выделить пол это cachedThreadPool

Vladimir
16.01.2018
06:40:42
Вопрос по ktor: при использовании NettyApplicationEngine можно как-то подкрутить SslContext (например, указать trust manager)?

Google

Alexei
16.01.2018
06:51:49
я бы для файлов попробывал все таки https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.experimental.selects/select.html
предидущее решение как по мне ничем не отличается от блокируещего чтение в сингл тред пуле

Igor
16.01.2018
07:37:14

Alexei
16.01.2018
07:49:22
https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md#selecting-deferred-values

Roman
16.01.2018
07:51:04
Это хороший способ обработать результат, но в задачке результат ведь не нужен.

Alexei
16.01.2018
07:52:51
так насколько я понимаю евейт заблочит тред и чтение будет последовательным(конечно же только при условии что асинк лениво выполняется)

Руслан
16.01.2018
07:54:04
await не блочит тред, но да - вычитка будет последовательная. но в задаче это не важно, т.к. там достаточно CompletableFuture.all(...promises)

Roman
16.01.2018
08:00:56
Ну любой выделенный тред пул - лучшее место для io, чем CommonPool.

Alexei
16.01.2018
08:00:57
так вродь и комон пул забивать ио тож не по феншую?

Roman
16.01.2018
08:01:45
В том примере - победителе кстати именно так: весь io выполняется на тред пуле okhttp, а обработка на CommonPool.

Руслан
16.01.2018
08:03:25
Другое дело что с корутинами так не получится сделать, наверно

Roman
16.01.2018
08:04:35

Руслан
16.01.2018
08:06:01
https://stackoverflow.com/questions/37512662/is-there-anything-wrong-with-using-i-o-managedblocker-in-java8-parallelstream

Igor
16.01.2018
08:06:07
А через netty можно было написать тут загрузку файлов? Он вроде бы вообще не блокирующий.

Roman
16.01.2018
08:07:16
Можно, но не очень то полезно.
Прироста в скорости врядли добьемся, мне почему-то кажется, что даже будет хуже.

Руслан
16.01.2018
08:07:47
По сути ManagedBlocker говорит FJP когда выделить новый тред, потому что какой-то таск точно заблокирует тред в пуле

Google

Roman
16.01.2018
08:10:26
Ничоси.
Вот это фича. Не знал. Похоже это реально будет работать.
Сложно только и нифига не очевидно. Корутины и тред пулы все же понятнее.

Andrew
16.01.2018
08:19:44
А откуда знание что cachedThreadPool это самое то для I/O?
о ManagedBlocker не знал, ибо пришёл с андроида, а вообще логично же, что common pool можно заблокировать полностью, а cached pool -- нет, хотя много одновременных операций и будут очень неэффективны.
я не спорю, что неблокирующий ввод/вывод -- наилучшее решение, но не везде его легко заиметь. потому имхо cached pool -- меньшее из зол.

Roman
16.01.2018
08:28:18

Andrew
16.01.2018
08:33:24
fixed на 10 разве не забьётся 10ю блокирующимм операциями? Или я чего-то в этой жизни не понимаю?

Roman
16.01.2018
08:34:38
Конечно. Но это ведь именно то, что нам и нужно.

Andrew
16.01.2018
08:36:52
я понимаю, что 640 КБ хватит всем, но наверное, зависит от конкретных кейсов.

Руслан
16.01.2018
08:36:53
Забьет. Вопрос в том что мы хотим, наплодить много тредов - что не ок, или сделать очередь + не так много тредов

Andrew
16.01.2018
08:39:04
да, убедили. я на всё смотрю через призму своей текущей задачи, где у меня многопоточность сделана через одно место, а надо как можно быстрее из последовательных портов выгребать данные, иначе железу становится плохо.

Igor
16.01.2018
08:48:35
А jdk.incubator.http.HttpClient работает через NIO?

Руслан
16.01.2018
08:50:12
Это же апи?

Igor
16.01.2018
09:04:45
В смысле апи? Это из java9
Судя по сорцам jdk.incubator.http.HttpClientImpl$SelectorManager - кажется что через NIO
Тут еще в докладе Куксенко про него интересная информация, что несмотря на NIO,
он все равно юзает cached-thread-executor для разных операций и на один запрос генерит до 12 тредов в нем.
По этому лучше ему явно задавать Executors.newFixedThreadPool(2)

Konstantine
16.01.2018
09:39:46
Вроде был какой-то оператор, как in только с обратным порядком, не?
А, всё, не так подошел к вопросу. Лист просто реверснутым делал.

Vitalii
16.01.2018
09:41:47
downTo?

Konstantin
16.01.2018
09:42:55
downTo?
ну это если по range гонять, а если а foreach style то да, вроде только список реверсить.

Roman
16.01.2018
09:51:52

Igor
16.01.2018
09:52:35
Да с jpoint