
Quantum Harmonizer
17.08.2018
14:47:52
хотя, вот если там io...

Nanodesu
17.08.2018
14:48:02
Ну мои представления об этом довольно приблизительны, я потому и консультируюсь

Alexey
17.08.2018
14:48:11
И все блокируются

Alexander
17.08.2018
14:49:35
Количество тредов должно превышать количество ядер в процессоре только в очень редком случае, когда там идут блокирующие вызоы. И даже в этом случае не надо создавать 1000 тредов, надо реющать уже созданные. В корутинах, если нет особой специфики вообще надо использовать CommonPool и не париться

Google

Alexey
17.08.2018
14:50:57
Ну это не совсем так

Alexander
17.08.2018
14:51:23
В какой части? Если в первой, то это сознательное упрощение.
Есть еще всякие диспач-треды, которые живут вечно.

Nanodesu
17.08.2018
14:52:19

Alexander
17.08.2018
14:52:26
да

Nanodesu
17.08.2018
14:52:55
Ну, а вот попробуйте запустить этот код с CommonPool и посмотрите что получится
Вот так например
val rnd = Random()
val initList = (0..5000).toList()
val asyncIter = initList.channeledCalls() {
runBlocking { delay(rnd.nextInt(10000)) }
it
}
asyncIter.forEach {
println(it)
}

Quantum Harmonizer
17.08.2018
14:53:51
delay неблокирующий, он суспендящий

Alexey
17.08.2018
14:54:32
В какой части? Если в первой, то это сознательное упрощение.
Ну вообще 1-ая часть это как раз ~ 100% случаев, при взамодействии с внешним миром всегда нужно дать еще тредов, ну и чтобы разгребать таски и не увеличивать perc95 ответов, зачастую приходится сделать гораздо больше тредов чем количество ядер
Да вырастет медиана

Alexander
17.08.2018
14:55:15
Я сознательно упростил. Подразумевал рабочие треды

Alexey
17.08.2018
14:55:45
Как раз про рабочие треды это втарая часть моего месаджа

Alexander
17.08.2018
14:57:47
Ну, а вот попробуйте запустить этот код с CommonPool и посмотрите что получится
код вообще странный. Вот это:
async(start = CoroutineStart.LAZY, context = corCont) {
function(it)
}.also { def ->
def.invokeOnCompletion {
runBlocking { channel.send(def.getCompleted()) }
}
def.start()
}
не понятно, что должно делать. Почему не
async(start = CoroutineStart.LAZY, context = corCont) {
channel.send(function(it))
}

Google

Руслан
17.08.2018
14:58:02

Alexander
17.08.2018
14:58:13
В смысле без lazy старта
```
async {
channel.send(function(it))
}
```

Aleksandr
17.08.2018
15:19:24

Kirill
17.08.2018
15:23:44
Хорошая реклама. Надо брать.

Di7aK
17.08.2018
15:25:00
ор
у меня и на заглушке не лагает

Kirill
17.08.2018
15:25:20

Quantum Harmonizer
17.08.2018
18:49:47
блинблинблин, extension var не в силах перекрыть member val

Alexander
17.08.2018
18:54:50
удивительно
лапы прочь от мемберов и все такое

Quantum Harmonizer
17.08.2018
18:55:37
хочется внутри транзакции добавить сеттер

Alexander
17.08.2018
18:55:57
?♂️
Низя. Иначе груви получится, со всеми вытекающими последствиями
Можно сделать инлайн класс и добавить ему один метод.
Или заменить

Quantum Harmonizer
17.08.2018
18:58:30

Alexander
17.08.2018
19:03:39
А чего, я люблю груви, но когда его много, он становится слишком похож на питон.

Vitalii
17.08.2018
19:57:33

Igor
18.08.2018
03:08:32
Verifier rejected class superpackage.MapFragment: void superpackage.MapFragment.render(superpackage.states$MapState) failed to verify: void superpackage.MapFragment.render(superpackage.states$MapState): [0x58] register v6 has type Reference: java.lang.Object but expected Precise Reference: superpackage.MapboxMapAdapter (declaration of 'superpackage.MapFragment' appears in /super/puper/package-1/base.apk:classes2.dex)
У кoгo былo пoхoжее, в чем пpoблема? Пpям пoвальнo началoсь.
UPD: кoнкpетнo в мoем случае пpoблема oказалась в тoм, чтo Android Studio и кoтлин плагин слишкoм глупые, чтoбы пoдсказать, чтo где-тo нужен явный тайпкаст Any -> T. В тo вpемя как в байткoде этo местo пpинималoсь за Any == Object и делалo мне такие гадoсти.

Google

Igor
18.08.2018
06:45:00
Стoит пеpеписать на java и все чики-бpики.

Di7aK
18.08.2018
07:07:14
супер пупер

Bogdan
18.08.2018
10:25:19

Alexander
18.08.2018
17:07:57
Я подвис. Играюсь с Kotlin gradle DSL как обычный JavaExec настроить. Что надо в classpath писать?

Sergey
19.08.2018
13:26:50

Alexander
19.08.2018
13:28:06
Поиском не нашел. Один пример только, да и там кастомный classpath. Подобные штуки в энтерпрайзе редко используются. Ну сейчас посмотрю спринг
Нет, JavaExec не встречается

Sergey
19.08.2018
13:28:50
Можешь ещё бил скрипты самого Котлин dsl посмотреть

Alexander
19.08.2018
13:29:17
А я по-моему смотрел
Да, смотрел. Там в потрохах где-то используется но явно не вызывается

Boris
19.08.2018
14:07:47
Боюсь ошибиться, но для этого обычно создают отдельный конфигурейшн, настраивают его как компайл какой-нибудь и потом просто резолвддепенденсиз в класспас строку склеивают

Alexander
19.08.2018
14:09:01
А зачем такой геморрой?

Alexander
19.08.2018
14:09:22
task jfreechart(type: JavaExec){
group = "example"
classpath = sourceSets.main.runtimeClasspath
main = 'scientifik.kplot.examples.JFreeChartFrameTestKt'
}

Boris
19.08.2018
14:09:24
А как по-другому?

Alexander
19.08.2018
14:09:38
Вот этот вариант отлично работает в груви варианте.
В kotlin dsl нет sourcesets.

Boris
19.08.2018
14:11:17
А, ну да, наверное просто можно присваивать конфигурации напрямую

Alexander
19.08.2018
14:11:53
Мне нужна основная compile конфигурация, без выкрутасов

Boris
19.08.2018
14:12:11
Но не понимаю причем тут сорсетс

Google

Alexander
19.08.2018
14:12:20
Я тоже не понимаю, это магия

Boris
19.08.2018
14:12:22
Если тебе нужен класспас

Alexander
19.08.2018
14:12:41
Но хочется чтобы магия работала в kotlin тоже

Boris
19.08.2018
14:12:50
Используй конфигурацию

Admin
ERROR: S client not available

Boris
19.08.2018
14:12:55
Compile

Alexander
19.08.2018
14:13:02
Пробовал, не видит котлин класс

Boris
19.08.2018
14:13:05
Напрямую
Котлин класс?

Alexander
19.08.2018
14:13:59
Класс + Kt
Из Groovy DSL видит

Boris
19.08.2018
14:14:41
В тебе нужно ещё и скомпилированные классы?

Alexander
19.08.2018
14:15:13
Мне нужно, чтобы все было что есть, просто с несколькими разными точками входа.
Если бы была одна, то можно было бы использовать application, а мне нужно то же самое, что application, но много.

Boris
19.08.2018
14:16:15
Аа
Тогда понятно откуда сорсетс взялись ?

Alexander
19.08.2018
14:16:57
sourcesets взялись из официального примера https://docs.gradle.org/current/dsl/org.gradle.api.tasks.JavaExec.html

Boris
19.08.2018
14:17:51
Ну так ты склей аутпут компилятора и резолвддепенденсиз конфигурации

Alexander
19.08.2018
14:17:57
Вот хочу то же самое, но на kotlin DSL

Boris
19.08.2018
14:18:07

Google

Alexander
19.08.2018
14:18:50
В данном случае толк в том, что он работает. Градл очень сложный внутри, понять его полностью - мозги склеятся.

Boris
19.08.2018
14:20:11
Не, на градле можно писать только если понял что внутри, потому и котлиндсл это благо, он от части магии избавляет и делает её очевидной для понимания и использования

Alexander
19.08.2018
14:21:28
С первым утверждением радикально не согласен. Градл как раз таки много того, что понимать не нужно прячет под капот, он на то и декларативный. Проблема в том, что там есть много исторических наслоений и утилок, в которых сложно что-то разобрать.

Boris
19.08.2018
14:21:50
Но я запускал этот джаваэкзек с пол года назад, из конфигурации зависимости брал

Alexander
19.08.2018
14:22:31
Вот мавен действительно надо было понимать, по крайней мере lifecycle.
Да я потыкался, плюнул и сделал на груви. Мне пока не критично, просто демку надо было сделать.

Boris
19.08.2018
14:23:15

Alexander
19.08.2018
14:23:57
В этом есть разумное зерно. Буду читать пейджер, много думать. Но пока надо чтобы просто работало.
Еще бы найти где это по человечески написано.

Boris
19.08.2018
14:25:57
Проблема в том, что как только появляется проблема, то решить её без понимания невозможно. А с тем количеством магии которая там есть, проблемы сыплются градом как только ты отходишь на два шага от готовых тасков скопипащенных из примера
Я на котлин дсл делал билд примерно в 300кб