Size: a a a

Kotlin Community

2019 November 21

D

Denys in Kotlin Community
Max
Всем привет!

Помогите пожалуйста кто может. Програмируйю много лет ООП на плюсах и тут меня неожидано кинули на ФП в  Котлин, Ява  и Грэдл...короче для меня пока полный мрак :-(
Проблема: есть некий Ява класс который я запускаю из майн Котлин класса и который общаетса с моим клиентом через (в клиенте) реализованый обсервер интерфейс. Пока всё ок.
Проблема в том, что Ява дёргает мой интерфейс коллбэк из своего working thread, что делает последующую обработку, скажем так, немного проблематичной.
Вот ищю и немогу понять, как отсюда опять попасть (передать управление) в main thread клиента?  
(Ява класс -> org.snmp4j.Snmp, интерфейс -> org.snmp4j.util.TreeListener)

Заранее огромное спасибо!
С этим лучше в @pofftop чтобы не засорять основной чат. Там поможем.
источник

AN

Alexander Nozik in Kotlin Community
Max
Всем привет!

Помогите пожалуйста кто может. Програмируйю много лет ООП на плюсах и тут меня неожидано кинули на ФП в  Котлин, Ява  и Грэдл...короче для меня пока полный мрак :-(
Проблема: есть некий Ява класс который я запускаю из майн Котлин класса и который общаетса с моим клиентом через (в клиенте) реализованый обсервер интерфейс. Пока всё ок.
Проблема в том, что Ява дёргает мой интерфейс коллбэк из своего working thread, что делает последующую обработку, скажем так, немного проблематичной.
Вот ищю и немогу понять, как отсюда опять попасть (передать управление) в main thread клиента?  
(Ява класс -> org.snmp4j.Snmp, интерфейс -> org.snmp4j.util.TreeListener)

Заранее огромное спасибо!
Сочувствую вашим плюсам. Врагу не пожелаю. Но ваша пробелма вообще похоже не пра парадигму, а про банальное управление потоками. У вас должен быть какой-то экзекутор, который внутри колбэка должен перевести выполнение на нужный вам тред. Это не котлин-специфичный вопрос.
источник

D

Denys in Kotlin Community
Лучше в @kotlin_start :)
А что именно интересует - как реализованы корутины?
источник

D

Denys in Kotlin Community
Вот тут есть немножко про то, как там внутри.
https://github.com/Kotlin/KEEP/blob/master/proposals/coroutines.md
источник

D

Denys in Kotlin Community
Тогда в чем вопрос?
источник

D

Denys in Kotlin Community
Корутина в Kotlin - это кусок кода, который может быть приостановлен в специальных (suspention) точках. Это позволяет описывать асинхронные вызовы в императивном стиле.
источник

D

Denys in Kotlin Community
Ну и да, concurrency != parallelism. :)
Думаю, если уточните вопрос - получите более конретный ответ.
источник

BV

Boris Vanin in Kotlin Community
Корутины тут не причем. Это нужно смотреть как работает либа, которую ты используешь
источник

BV

Boris Vanin in Kotlin Community
Например nio из жвм стдлиба
источник

BV

Boris Vanin in Kotlin Community
У неё есть всё это
источник

D

Dmitry in Kotlin Community
Лёша Лазарев
мб указать ExcpetionHandler при создании скоупа?
Скоупа родителя? А он будет ловить эксепшн в предке или когда он уже к родителю поднимется?
источник

BP

Bogdan Panchenko in Kotlin Community
источник

BP

Bogdan Panchenko in Kotlin Community
живем в 2к19, люди поиском не научились пользоватся
источник

D

Denys in Kotlin Community
Если вы про системные вызовы - то, полагаю, это зависит от реализации JVM. Корутины работают на существующем байт-коде.
источник

BP

Bogdan Panchenko in Kotlin Community
это поиск по учасникам. У меня дополняет везде)
источник

Y

You in Kotlin Community
источник

BP

Bogdan Panchenko in Kotlin Community
ничто не блокирует, задача выполняется на потоке, если есть саспенд вызов, идут разные проверки, есть возможность "заснуть", завернуть ссостояние выполнения в структурку. А потоки хранятся в тредпул (в jvm), в джс не знаю, а с нейтиво все плохо пока
источник

BP

Bogdan Panchenko in Kotlin Community
Bogdan Panchenko
ничто не блокирует, задача выполняется на потоке, если есть саспенд вызов, идут разные проверки, есть возможность "заснуть", завернуть ссостояние выполнения в структурку. А потоки хранятся в тредпул (в jvm), в джс не знаю, а с нейтиво все плохо пока
это если в краце, лень писать, иду спать
источник
2019 November 22

AM

Andrew Mikhaylov in Kotlin Community
В котлине то, о чём вы говорите, разделено на три отдельных концепта.
В рамках компилятора есть обработка suspend-функций, которая последовательный код распиливает в реэнтерабеьный автомат с continuation passing style.
В kotlinx.coroutines введены концепты диспетчера, который умеет планировать выполнение континьюэйшнов, джобы, которая представляет еддиницу отменяемой работы, и контекста, который позволяет к корутине прицепить произвольный набор необходимых ей данных, включая вышеуказанные вещи.
epoll/kqueue/iocp — это, очевидно, про то, что будет отвечать за асинхронный ввод-вывод, и вызывать в конечном континьюейшн, который впоследствии диспетчером будет запланирован на выполнение на конкретном потоке. Тут не подскажу, куда в рамках специфичного для котлина решения копать, к сожалению. Из "стандартных" мультиплатформенных решений для асинхронного ввода-вывода пока есть только CIO engine для ktor, но это, вероятно, не настолько общая штука, как вы хотите.
источник

VP

Vladimir Petrakovich in Kotlin Community
По последнему пункту из распространённого есть только java.nio и нативная реализация в Netty.
Всё остальное - обёртки поверх этих штуковин, так что копать туда.
источник