@kotlin_lang

Страница 823 из 982
Nail
23.08.2018
15:32:03
Но вот в коррутинах, которые призваны сделать асинхронный код синхроныый, неплохо использовать try catch... Получается в случае Result отказываешься от этой фичи

Mikhail
23.08.2018
16:44:28
но тогда либо нужно везде не забывать onErrorReturn(), либо обрабатывать exception и в Either, и в виде чистого exception
Either жеш должен явно показывать, что кроме типа Left никаких ошибок быть не может в принципе

Sergey
23.08.2018
16:45:27
https://github.com/Kotlin/kotlinx.coroutines/releases/tag/0.25.0 очень крутой релиз, из нового поддежка thread local данных, перелопатили обработку исключений в корутинах и IO пул добавили

Google
Bogdan
23.08.2018
17:32:32
а блокировать треды из комонпул так себе

Жабра
23.08.2018
17:34:25
а блокировать треды из комонпул так себе
При чём тут блокировка? Корутины же не про блокировку тредов...

Igor
23.08.2018
17:34:35
А чем полезен IO пул? (Вопрос от нуба)
Для ведра он, очевидно же. Где у нас ещё Java 6 ?‍♀

Rikland
23.08.2018
17:35:41
Для ведра он, очевидно же. Где у нас ещё Java 6 ?‍♀
Ты не поверишь (: существуют такие места (:

Bogdan
23.08.2018
17:35:55
При чём тут блокировка? Корутины же не про блокировку тредов...
ну в корунтине ты пойдешь в ио, он заблокирует тред, пойдешь второй раз, опять заблокириуешь, так у тебя треды и закончятся, и в итоге все будут ждать

Bogdan
23.08.2018
17:42:20
Я имел ввиду, чем io пул отличается от common пула?
это просто упрощения, раньше ручками нужно было создавать отдельный пулл, сейчас за тебя делает либа

Google
Руслан
23.08.2018
17:42:24
Я имел ввиду, чем io пул отличается от common пула?
У него больше тредов, up to 64, или больше если больше процессоров на машине)

Жабра
23.08.2018
17:43:41
У него больше тредов, up to 64, или больше если больше процессоров на машине)
Понял.) А у common пулла сколько потоков? (В Гугле не забанили, не нашёл эту инфу)

Alexander
23.08.2018
17:44:16
Сколько ядер , столько и потоков

Руслан
23.08.2018
17:45:02
Типо того, +- 1

Жабра
23.08.2018
17:45:23
Сколько ядер , столько и потоков
Ну сказали что io имеет 64 потока. Значит у common было меньше

Alexander
23.08.2018
17:45:57
А у вас 64 ядра на машине?

Жабра
23.08.2018
17:46:28
Alexander
23.08.2018
17:46:52
У меня 8. На io бывает блочится

В документации не сказано сколько, но сказано, что он обертывает дефолтный ForkJoinPool, а там сколько потоков

Igor
23.08.2018
17:48:59
ну JDBC драйвера во всех джавах
На используй это г мамонта. Есть же асинхронные драйверы, конкретно под дб

Жабра
23.08.2018
17:49:46
У меня 8. На io бывает блочится
Я всё равно не понял. IO пул использует блокировку? Или что? Можете более развернуто объяснить, пожалуйста?

Alexander
23.08.2018
17:50:01
Я пока не дочитал :)

Нет, это просто альтернативный пул с бОльшим количеством потоков.

Bogdan
23.08.2018
17:50:48
ричем есть хорошие доклады, правда джавовые

Alexander
23.08.2018
17:51:39
Смысл в том, что все потенциально блокирующие io операции выделяются в отдельный большой пул. Если он блочится, то не страшно, поскольку основной пул живет

Alexander
23.08.2018
17:58:22
ага

Google
Руслан
23.08.2018
17:58:31
Нет, зависит от API

Alexander
23.08.2018
17:58:42
Сеть обычно асинхронная. Так что скорее в файл или бд

Руслан
23.08.2018
17:59:00
если API асинхронный, то IO не ненужен

Bogdan
23.08.2018
17:59:02
но в Андроиде вроде небыло NIO

Konstantin
23.08.2018
18:00:37
Жабра
23.08.2018
18:01:18
если API асинхронный, то IO не ненужен
Ну например в андройде я делаю что-то типа launch(UI) { //что-то withContext(DefaultDispatcher) { // запрос в сеть или бд } //что-то }

Igor
23.08.2018
18:01:37
Руслан
23.08.2018
18:02:01
Может наоборот?
исправился

Ну например в андройде я делаю что-то типа launch(UI) { //что-то withContext(DefaultDispatcher) { // запрос в сеть или бд } //что-то }
ну например если используешь синхронный вариант okhttp - то используй IO, а если асинхронный okhttp - то любой подойдет

Руслан
23.08.2018
18:04:48
ну блин, я даже пример привел близкий андроиду) в общем не важно что, важно какой API, синхронный - что означает что он блокирует тред на котором ранается корутина, или асинхронный - т.е. неблокирующий текущий тред

Руслан
23.08.2018
18:05:05
okhttp так-то тоже поверх тред пула, но у него есть асинхронный API

Жабра
23.08.2018
18:05:31
Окей, спасибо.)

Т.е. получается что с withContext, в моём случае, лучше IO.

Руслан
23.08.2018
18:06:53
Я честно говоря пока не понял в чем большое приемущество нового IO перед простым cachedThreadPool https://github.com/Heapy/tgto/blob/master/src/main/kotlin/app/hea/tgto/coroutines/Contexts.kt#L36 сс @relizarov

Igor
23.08.2018
18:09:24
Он кроссплатформенный ? И наверное delay обрабатывает более оптимизироаанно.

Иван
23.08.2018
19:22:22


Google
Иван
23.08.2018
19:22:22
"cause": { "arg0": [ "должно соответствовать шаблону \"^[0-9a-zA-Z]{1,64}$\"" ] }

"cause": { "itemId": [ "должно соответствовать шаблону \"^[0-9a-zA-Z]{1,64}$\"" ] }

Bogdan
23.08.2018
19:25:02
мне кажется нада у спринга спросить, ну или попробовать на джаве класс переписать, что-бы убедится что тут замешан котлин

разве можно на интерфейс вешать @RestController ?

Bogdan
23.08.2018
19:29:25
https://stackoverflow.com/questions/8002514/spring-mvc-annotated-controller-interface-with-pathvariable

Admin
ERROR: S client not available

Bogdan
23.08.2018
19:29:38
Да, работает
работает но как

спринг он такой...

Жабра
23.08.2018
19:38:19
Щас задумался... Корутины запускаются в тред пуле. Тред пул имеет очередь задаваемых действий, сначала выполняет текущие действия, а потом выполняет другие. По идее как, пока не закончит текущие - он не может начать новые. Как тогда выполняется такой код? val list = List(1000) { launch { delay(1000) print(".") } } list.forEach { it.join() } Я правильно понимаю, что когда он видит delay, тред пул откладывает вычисления, берёт следующие, а потом проверяет старые?

Жабра
23.08.2018
19:40:16
тредполл - набор тредов
Ну окей, не тредпул, а экзекьютер.)

Alexandr
23.08.2018
19:42:52
работает но как
Скорее всего идёт изучать вглубь, есть вроде метод получения аннотаций родителя, комп не под рукой но должно быть не сложно

Bogdan
23.08.2018
19:43:32
> По идее как, пока не закончит текущие - он не может начать новые
представь ты Барин, у тебя крепосные, тебе приходит сделать то то и то, ты раздаешь приказы своим крепосным, но ты можешь скасть "Ей ты пойди помоги, или сделай то-то, а потом продолжай свою работу"

Google
Alexandr
23.08.2018
19:45:03
не думаю, и ответ стековерфлов с таким ответом
Кстати, аннотация может быть наследуемой, скорее всего именно так и работает

Никита?❄️
23.08.2018
19:45:08
вставлю 5 копеек: можешь просто писать@PathVariable itemId: String, спринг поймёт имя

Никита?❄️
23.08.2018
19:45:54
как и @RequestParam, @RequestHeader и @CookieValue (вроде так)

Bogdan
23.08.2018
19:46:35
Я понимаю, что именно так и работают корутины, но мне интересно, как это реализовывается
ну тут начинается сложные штуки, но вроде пока инфу не разглашают

Alexandr
23.08.2018
19:46:40
вставлю 5 копеек: можешь просто писать@PathVariable itemId: String, спринг поймёт имя
В java 8, и то если метаинфориация не затирается флагами компиляции

Andrew
23.08.2018
19:46:46
Щас задумался... Корутины запускаются в тред пуле. Тред пул имеет очередь задаваемых действий, сначала выполняет текущие действия, а потом выполняет другие. По идее как, пока не закончит текущие - он не может начать новые. Как тогда выполняется такой код? val list = List(1000) { launch { delay(1000) print(".") } } list.forEach { it.join() } Я правильно понимаю, что когда он видит delay, тред пул откладывает вычисления, берёт следующие, а потом проверяет старые?
Тредпул просто гоняет код, он не решает, когда и что откладывать. За планирование выполнения корутин отвечает https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.experimental/-coroutine-dispatcher/index.html Именно он при выполнении suspend-функции, коей является delay, приостанавливает текущую корутину и запускает следующую из очереди -- на тредпуле (CommonPool), на текущем потоке (Unconfined), в UI-потоке с помощью соответствующего планировщика (UI) etc.

Никита?❄️
23.08.2018
19:46:57
Alexandr
23.08.2018
19:48:37
И что? Эта фишка джавы и она появилась в 8ке

Bogdan
23.08.2018
19:49:30
В java 8, и то если метаинфориация не затирается флагами компиляции
тогда поидее вообще бы не работало, и смысл аннотаций 0

ведь их не будет по факту

Andrew
23.08.2018
19:57:19
Спасибо!)
Ну и да, доклады Романа Елизарова, упомянутые выше, действительно очень хороши.

Жабра
23.08.2018
20:01:53
Ну и да, доклады Романа Елизарова, упомянутые выше, действительно очень хороши.
Я смотрел, кажется, все его доклады про корутины. Но, похоже, этот момент я провтыкал...

I
23.08.2018
20:07:27
Подскажите, а есть способ включить в идее подсказки методов репозиториев в Jpa, как в java?

Иван
23.08.2018
20:15:37
Вот так завелось: <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <configuration> <args> <arg>-java-parameters</arg> </args> </configuration> </plugin>

Страница 823 из 982