
Igor
23.08.2018
15:31:53

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

Mikhail
23.08.2018
16:44:28

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

Google

Жабра
23.08.2018
17:32:15

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

Жабра
23.08.2018
17:34:25

Igor
23.08.2018
17:34:35

Rikland
23.08.2018
17:35:41

Bogdan
23.08.2018
17:35:55

Alexander
23.08.2018
17:38:01

Жабра
23.08.2018
17:41:28

Bogdan
23.08.2018
17:42:20

Google

Руслан
23.08.2018
17:42:24

Жабра
23.08.2018
17:43:41

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

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

Жабра
23.08.2018
17:45:23

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

Bogdan
23.08.2018
17:46:01

Жабра
23.08.2018
17:46:28

Alexander
23.08.2018
17:46:52
У меня 8. На io бывает блочится
В документации не сказано сколько, но сказано, что он обертывает дефолтный ForkJoinPool, а там сколько потоков

Igor
23.08.2018
17:48:59

Bogdan
23.08.2018
17:49:35

Жабра
23.08.2018
17:49:46

Alexander
23.08.2018
17:50:01
Я пока не дочитал :)
Нет, это просто альтернативный пул с бОльшим количеством потоков.

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

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

Жабра
23.08.2018
17:58:14

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

Igor
23.08.2018
18:01:37

Руслан
23.08.2018
18:02:01

Жабра
23.08.2018
18:03:31

Руслан
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 обрабатывает более оптимизироаанно.

Dumitru
23.08.2018
19:18:36

Иван
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 ?

Иван
23.08.2018
19:28:55

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, тред пул откладывает вычисления, берёт следующие, а потом проверяет старые?

Bogdan
23.08.2018
19:39:50

Жабра
23.08.2018
19:40:16

Bogdan
23.08.2018
19:40:25
тред пул "назначает" задание каждому треду
это очень отдаленно

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

Bogdan
23.08.2018
19:43:32

Жабра
23.08.2018
19:44:48

Google

Alexandr
23.08.2018
19:45:03

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

Bogdan
23.08.2018
19:45:22

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

Bogdan
23.08.2018
19:46:35

Alexandr
23.08.2018
19:46:40


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
ведь их не будет по факту

Жабра
23.08.2018
19:50:31

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>