LINUX.ORG.RU
ФорумTalks

В джаву таки завезли горутины

 


2

7

Сабже. Или корутины, если вы вдруг котлинист. Разница с корутинами только в том, что в Котлине - это генерация байткода, а в жабе - это хак JVM

И называются они Файберы. Почему не корутины? Потому что «файберы» - красивей и короче)

Файберы строятся на континуациях, которые можно прерывать.

public class Continuation implements Runnable {
    public Continuation(ContinuationScope scope, Runnable body);
    public final void run();
    public static void yield(ContinuationScope scope);
    public boolean isDone();

    protected void onPinned(Reason reason) {
        throw new IllegalStateException("Pinned: " + reason);
    }
}

и используются они как-то так:

Continuation cont = new Continuation(SCOPE, () -> {
        while (true) {
            System.out.println("before");
            Continuation.yield(SCOPE);
            System.out.println("after");
        }
    });

while (!cont.isDone()) {
    cont.run();
}

Соответственно, файберы реализованы поверх них как

Fiber f = Fiber.execute( () -> {
    System.out.println("Good Morning!");
    readLock.lock();
    try {
        System.out.println("Good Afternoon");
    } finally {
        readLock.unlock();
    }
    System.out.println("Good Night");
});

Внутри файбера соответственно, есть континуация - одна штука, и планировщик - 1 одна штука (общий для всех файберов).

Планировщик берет файбер, выколупывает из него континуацию, и кладёт для выполнения на какой-то реальный нативный тред в ОС.

Суперподробное объяснение я сделал по вот этой ссылке. Есть обычный видеокаст, есть его текстовая расшифровка.

Выводы: Java скоро станет ещё быстрей, чем раньше, и разорвёт всех в пух и прах. Помянем Golang и Nodejs, вы были хорошим источником вдохновения.

★★★★☆

Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от Deleted

Ну ты ж всё равно не видишь этих скопов. Не предполагается, что юзер будет использовать корутины напрямую. Юзер будет видеть только файберы. Ну или то, во что завернут это в Spring и других местах. Читай полную статью, там расписано.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Как юзер я могу любые интимные места публичного АПИ видеть и юзать. Хотя если это уровня - рефлекшена, только для авторов библиотек\фреймворков, то да, норм.

ps. читать лень, я щас в кровавом ынтерпрайзе, и таки плюшки мне один хрен не светят, а концепцию я и так знаю.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Разница с корутинами только в том, что в Котлине - это генерация байткода, а в жабе - это хак JVM

Поясни, плес.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)

Корутины придуманы неосиляторами state machines.

post-factum ★★★★★
()

Чем это лучше чем RxJava, они более производительнее?

Int64 ★★★
()
Ответ на: комментарий от Deleted

На Kotlin ещё вчера с нормальным синтаксисом.

Legioner ★★★★★
()
Ответ на: комментарий от intelfx

Думаю, в случае JVM машина состояний будет генерироваться JIT-компиляцией, а в случае Kotlin она генерируется во время компиляции в байткод.

Legioner ★★★★★
()

Думаю в скале будет приятно выглядеть по итогу.

Хотя в котах вроде что то было.

nihirash ★★★
()
Последнее исправление: nihirash (всего исправлений: 1)

Олег, у тебя в видео на скринах с idea, какая цветовая схема используется? Можешь дать ссылку на неё?

pol01
()

Извиняюсь за оффтоп. Кто-нибудь использует Android Studio? Какие у вас впечатления, в плане стабильности и быстродействия? Мы с коллегой занимаемся одним проектом, я пишу api-сервер, он клиент под андроед. Я лично почти в восторге от idea (community edition). А вот товарищ говорит, что студия - глючное прожорливое поделие. Видел пару ситуаций, впечатление сложилось не очень хорошее.

И почему отказались от ADT? Eclipse с плагин был вполне себе юзабительным и шустрым. Он теперь вообще не поддерживается? Современный проект от студии не откроет?

popov-aa
()

Java скоро станет ещё быстрей, чем раньше, и разорвёт всех

Дотнетовщину то уделает?

Hertz ★★★★★
()

Что только не придумают, лишь бы не программировать нормально.

Deleted
()
Ответ на: комментарий от Hertz

Дотнетщики сами себя уделывают своими евентами. А то что они с C++ сделали, уделывает даже уже уделанных по самый неудел.

Deleted
()

Смотрю stevejobs-а на youtube, уже больше пяти минут посмотрел, а там лишь вода и никакого кофе. С какой минуты идёт нормальное описание?

bbk123 ★★★★★
()

Чем это принципиально отличается от той кооперативной многозадачности, которая была реализована в Java 1.1 через green threads (когда native threads ещё не было и в помине, даже на Solaris)?

Это ведь оттуда тянется бессмысленный ныне Thread.yield().

Bass ★★★★★
()
Ответ на: комментарий от pol01

если ты про код, то он открыт в Visual Studio Code с дефолтной схемой и дефолтным бандлом java (предложение об установке вылезает сразу же после открытия любого .java-файла)

idea к сожалению, слишком многое подсвечивает, а на скрине хочется чтобы был один код

вообще могу посоветовать вот этот плагин: https://plugins.jetbrains.com/plugin/8006-material-theme-ui

это выбор, в том числе, нескольких разработчиков и евангелистов Идеи =)

скриншот там какой-то совершенно адский, в реальности она выглядит не так. Устанавливаешь, после перезапуска идеи появляется мастер настройки темы, выбираешь что нравится.

Мне борльше всего нравится пресет Darker, а на остальных вкладках выбираю высокую контрастность. Но это только мои предпочтения, потому что я сижу в день по 18 часом за компом, и зрение -5, и иногда без таких ухищрений глаза начинают раскалываться. Возможно, для людей, ведущих нормальный образ жизни, подойдет Material с дефолтной схемой

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от Bass

Этот yield это тот да не тот. Ваш саспендит поток и отдает управление какому-нибудь другому, а тот который тут, саспендит поток и отдает управление вызвавшему.

Типа для тех кто не осилил state machine боится коллбэков и него нет денег добавить 256MB памяти в ноду так, чтобы она переварила ещё одну тыщу клиентов.

Nastishka ★★★★★
()
Ответ на: комментарий от Bass

Это ведь оттуда тянется бессмысленный ныне Thread.yield()

Почему же бессмысленный?

bbk123 ★★★★★
()

Чем оно лучше того же monix? https://monix.io/

Нет, понятно, что создание thread - ресурсоёмкая операция, а ещё всякие context switch - идея как раз в том, чтобы это делать пореже - для чего придумали thread pools, много разных реализацией и стратегий. Чем онтопик прямо вот лучше? Простыми словами.

BattleCoder ★★★★★
()

Блин. А многопоточный «for» как в С++ когда завезут?

Ну в смысле чтобы без сервера потоков?

Serg_HIS
()
Ответ на: комментарий от RazrFalcon

Сколько уже этих названий для многопоточности придумали?

Всё равно в итоге делается всё одинаково.

Serg_HIS
()
Ответ на: комментарий от BattleCoder

В любом случае и при любой операции перемещения и выделения памяти - это очень ресурсоёмко (Ваш КО)

Serg_HIS
()

когда изучал конкурент, после того как все таски закинуты, наступает этап ожидания их завершения.

в туториалах пэйлоад таски вывести на экране хеловорд. все ок.

все не ок начинается если грузить в пустую базу данные. это детское ожидание быстро срывается с катушек.

написал интерфейс для тасок у которого есть метод получения обьекта Status с полем complete. этот обьект создает таска и через интерфейс отдает очереди. когда таска завершается, ставит complete=true . очереди достаточно пройтись по списку статусов и убедиться что все отработали.

проверялось при загрузке в голую базу 8_000_000 записей в ~30 потоков.

barberry ★★
()
Ответ на: комментарий от popov-aa

А вот товарищ говорит, что студия - глючное прожорливое поделие.

Она на базе IDEA, которая тоже глючное прожорливое поделие.

И почему отказались от ADT?

Политика партии Google.

Eclipse с плагин был вполне себе юзабительным и шустрым. Он теперь вообще не поддерживается?

Не поддерживается. Более того, совместимость с Eclipse ADT была намеренно сломана в Android SDK, чтобы перегнать оставшихся разработчиков на поделку JetBrains. Современные версии SDK не работают с Eclipse ADT.

Современный проект от студии не откроет?

Нормально не откроет. Разве что как Generic Java, т.к. там же Gradle. Eclipse ADT работал с Ant'ом.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Поддерживаю.

Так всё и есть.

Прискорбно.

А Яблы тоже самое делают.

Serg_HIS
()
Ответ на: комментарий от Nastishka

То что ты говоришь - это coroutine. А тут полноценный файбер - он отдает управление кому-нибудь другому, когда понимает, что прямо сейчас совершенно бесполезно тратит время треда-носителя. После yield уже планировщик решает, стоит ли соглашаться на самовыпил этого треда, и если да - кто займет его теплое место у батареи.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)

В джаву таки завезли горутины

Или корутины, если вы вдруг котлинист.

Слово «coroutine» придумал Конвэй ещё 60 лет назад. «Горутины» это такие же «файберы», просто высасывание терминов из пальца.

Bfgeshka ★★★★★
()

Выводы: Java скоро станет ещё быстрей, чем раньше, и разорвёт всех в пух и прах.

Займёт еще и все процессорное время вслед за памятью. И вообще многопоточность переоценена.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от popov-aa

IDEA хорошая сама по себе, пользовался разными IDE'шками от JetBrains, впечатления очень хорошие, а вот Android Studio говно полнейшее, гуглы рукожопы, мне иногда и 16ГБ оперативы не хватает, интерфейс вечно глючит, их редакторы вечно глючат, то пропадают поля где можно ввести атрибуты и в итоге приходится лезть в xml и вручную править, то ни с того ни с сего пропадает якорь для констрейнта, в итоге снова приходится лезть в xml и руками править, при этом еще и тормозит жутко, даже на моем компьютере (а я его покупал совсем не давно с не самым слабым железом).

Int64 ★★★
()

стейт машины в *VM языке

многопоточные циклы в С++

Нода и Голанг быстрее джавы

чего только не прочитаешь на лоре

missxu
()
Ответ на: комментарий от Serg_HIS

Обычно в начале всё равно очень много времени тратится на выделение памяти.

в смысле, поместить данные для обработки в саму таску.. можно таску определить параметрами, например диапазон.

barberry ★★
()
Последнее исправление: barberry (всего исправлений: 1)

Планировщик берет файбер, выколупывает из него континуацию

Какая смесь англицизмов с колхозимами.

tailgunner ★★★★★
()
Ответ на: комментарий от Int64

IDEA хорошая сама по себе, пользовался разными IDE'шками от JetBrains, впечатления очень хорошие, а вот Android Studio говно полнейшее, гуглы рукожопы, мне иногда и 16ГБ оперативы не хватает, интерфейс вечно глючит, их редакторы вечно глючат, то пропадают поля где можно ввести атрибуты и в итоге приходится лезть в xml и вручную править, то ни с того ни с сего пропадает якорь для констрейнта, в итоге снова приходится лезть в xml и руками править, при этом еще и тормозит жутко, даже на моем компьютере (а я его покупал совсем не давно с не самым слабым железом).

Вот-вот, коллега говорит то же самое. Странно как-то. Гугл и вдруг такое говно.

popov-aa
()

Суперподробное объяснение

Всё забито пустопорожней пургой и «прЫкольными» картинками, если честно, то читать/слушать невозможно. Предполагаю не очень много людей, которым это всё нравиться - будьте проще и подпищики к вам подтянуться :D.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

я очен стараюсь делать так, как делают топовые блогеры ютуба. Типа того же Макса 100500. Возможно, нужно перейти на формат Бэдкомедиана. Но все это очень много усилий и не делается за один раз. Нужно научиться делать очень многое - писать сценарии с интригой, искать смехучеки, харизматично обсирать говно. И это не считая собственно контента! Формат будет улучшаться, но второго бэдкомедиана в ближайшую пару месяцев не ждите, сорянчик.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от popov-aa

Вот-вот, коллега говорит то же самое. Странно как-то. Гугл и вдруг такое говно.

Да собственно Android SDK не лучше. Они там нанимают себе людей которые решают какие-то невероятно сложные математические задачи, и забывают что программы писать и решать математические задачи - это не одно и то же, лучше бы нанимали людей, которые умеют писать программы.

Int64 ★★★
()
Ответ на: комментарий от Int64

А чо ты смеешься, посмотри в топ социобледи

Макс-Стопятьсот все еще на четвертом месте, проигрывая разве что Маше и медведю. И недалеко от него This is Хорошо на ту же тему. Но Маша и Медведь понятно как там появилась и это не для нас, а во Макс-Стопятьсот и TIХ - это контент на взрослых

заметь, что Виласаком там на 11м месте, Хованыч на 36, а всякое днище которое люди взахлеб смотрят IRL и вкладываются миллиарды бабла типа канала НТВ - в самой жопе, куда никогда не заглядывает свет

в зависимости от формата шоу, там можно сразу посмотреть, что смотрят настоящие люди, а не влажные мечты корпоративных контент-мейкеров и «криейторов», мечтающих что вот их-то стерильный понос точно кому-то понравится. Нет, не понравится.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от barberry

не могу пройти мимо. я тоже так считаю.

нас уже трое

foror ★★★★★
()
Ответ на: комментарий от BattleCoder

Чем онтопик прямо вот лучше? Простыми словами

Тред пулы норм. Но если есть IO, да еще синхронное, то тредпул не поможет, когда у тебя миллионы транзакций. Каждая из них захватывает тред и стопит его в ожидании чтения с диска или данных из сети. Тред пула просто не хватит на всех. Тут либо на асинхронное IO с лапшой колбеков переходить. Либо юзать вот эти файберы.

Как сделают, можно глянуть, что по перформансу лучше - колбеки или вот эти файберы. Стоит ли оно того...

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от foror

Но если есть IO, да еще синхронное, то тредпул не поможет, когда у тебя миллионы транзакций

Что мешает их в очередь, например, отправить? Если на сервере условные 4 ядра, он всё равно больше четырёх потоков одновременно обрабатывать не в состоянии. А что касается IO - так там вообще будет упираться в диск/сетевой интерфейс...

Миллион транзакций одновременно в любом случае невозможно выполнять.

https://monix.io/docs/3x/execution/scheduler.html#execution-model вот тут вроде бы есть вариант и для IO.

BattleCoder ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.