Что такое корутины? [RU] / Мобильный разработчик

Поделиться
HTML-код
  • Опубликовано: 23 ноя 2024

Комментарии • 134

  • @nightscream3687
    @nightscream3687 4 года назад +37

    Спасибо, было интересно. Да, если это не занимает много времени, перевод таких статей и высказывание своих мыслей хорошо заходит, буду ждать еще.

  • @annaumova
    @annaumova 4 года назад +8

    С днем Рождения, Алексей! Нижайший Вам поклон за ваш труд, за созидание такого качественного контента. Каждое видео - на вес золота.

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Спасибо большое!)

    • @ЕгорМатвеев-ц7ф
      @ЕгорМатвеев-ц7ф 4 года назад

      Спасибо, Леша, определенно стоит делать подобные видео. Пригодится на собеседовании) ну и с днюшкой тебя!) Всех благ😘

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Спасибо )))

    • @ИлиаМинаев
      @ИлиаМинаев 4 года назад

      Если так, то присоединяюсь к поздравлениям

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Спасибо ))

  • @AnneTasse
    @AnneTasse 3 месяца назад +41

    А как корутины в Kotlin помогают улучшить производительность приложений? я сам пару лет назад закончил универ, но не мог устроиться на работу, поэтому прошел курсы от Skypro и получил классный оффер в финтех компанию))

  • @nickolasivantsov260
    @nickolasivantsov260 3 года назад +5

    Спасибо за перевод и обьяснения. Однозначно стоит делать такие вот видео.

  • @ЕвгенийШарабан-с8я
    @ЕвгенийШарабан-с8я 4 года назад

    Статья полезная, если подобные статьи будут выходить и далее - очень помогут в понимании сложных и важных тем. Спасибо, Алексей!

  • @АлександрЮрьев-м1к
    @АлександрЮрьев-м1к 4 года назад +21

    нихера не понял, но очень интересно ))

  • @goqorism
    @goqorism 4 года назад

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

  • @ЕгорПоляков-т5ъ
    @ЕгорПоляков-т5ъ 4 года назад +17

    Видео отличное, было б здорово если б на практике показал применение корутин) И да С Днем Рождения!!!

    • @MobileDeveloper
      @MobileDeveloper  4 года назад +2

      Есть вроде в каких то других видео ) спасибо большое )

  • @maksimkolosov5076
    @maksimkolosov5076 4 года назад +2

    Алексей, спасибо большое!
    Да, стоит переводить и другие статьи

  • @sonar_devices
    @sonar_devices 4 года назад +1

    Хорошая идея с переводом полезный статей. Пишу на котлине и использую корутины.

  • @kafychannel
    @kafychannel 4 года назад +1

    И формат у вас замечательный!!!

  • @sergeikarukes3662
    @sergeikarukes3662 4 года назад +1

    Видео полезное, спасибо, жду ещё, С Прошедшим Днём Рождения!

  • @АнтонЩербаков-в9ч
    @АнтонЩербаков-в9ч 4 года назад

    Реально хорошая статья. Некоторые вещи понятны были, на каком-то подсознательном уровне и я не мог их объяснить.

  • @user-sankarsana
    @user-sankarsana 4 года назад +1

    Крутая статья! Не хотел смотреть, думал что давно понял, что такое корутины. Ан нет, оказалось - не понимал.
    По поводу дальнейших публикаций интересных статей - очень хорошая идея.

  • @dasturchi_kasbi
    @dasturchi_kasbi 4 года назад

    С прошедшим днем рождения дорогой автор!

  • @kirillsushilnikov9614
    @kirillsushilnikov9614 3 года назад

    Спасибо за видео. В этот раз не успел чай попить.

  • @Xisofix
    @Xisofix 4 года назад +2

    Хорошее видео, прибавило понимания, спасибо)
    Правда некоторые моменты до сих пор воспринимаются как магия

  • @ИлиаМинаев
    @ИлиаМинаев 4 года назад

    Я тут 2й или 3й месяц на твоих видосах расту,
    но я еще совсем зеленый,
    весна на сердце,
    каждый день весна
    ну ты понял :D Спасибо за твои ролики!

    • @MobileDeveloper
      @MobileDeveloper  4 года назад +1

      )) понял ) я помню лет 6-7 назад на вашем канале нашёл видео про не ту дыру ) ржал тогда как конь )

    • @ИлиаМинаев
      @ИлиаМинаев 4 года назад

      @@MobileDeveloper ох а это такая случайность вообще. Просто вк тогда подключил и не хотел видос прогружать. Пришлось акк на ютубе создать, залить сюда. а через несколько лет захожу и у меня глаза на лоб полезли там было неск миллионов просмотров.

  • @tov3801
    @tov3801 3 года назад

    Было полезно. Спасибо большое!

  • @РоманВладимирович2024
    @РоманВладимирович2024 7 месяцев назад

    Хороший перевод

  • @alexeykrachkovsky8454
    @alexeykrachkovsky8454 3 года назад

    Очень полезно! Спасибо!

  • @АндрейКолмогоров-б9ы

    Спасибо, даже читать не надо статью, всё чётко

  • @maxim.hnatiuk
    @maxim.hnatiuk 4 года назад +1

    Очень понятно и грамотно.
    Хотелось бы уточнить:
    То есть корутина прерывается и даёт работать другой корутине, потому что вызывает у себя delay() на какое-то время, которое каждый раз разное?
    Может я не правильно понял, буду благодарен, если поправите)
    Спасибо за видео)

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Не совсем ) delay это частный пример операции с задержкой ) но в остальном да она доходит до точки остановки и возвращает обратно контроль вызвавшей ее стороне

  • @mikenaumov
    @mikenaumov 4 года назад

    Спасибо за видео! Познавательно и полезно.

  • @BGD-Belarus-Game-Dev
    @BGD-Belarus-Game-Dev 4 года назад +1

    Привет Алексей! Отлично рассказываешь, делаешь полезные видео, которые интересно смотреть, очень круто!
    Пробовал ли ты технологию Flutter, что думаешь про неё? Если разбираешься, не думал ли делать видосы по использованию этого SDK?
    Буду рад, если ответишь, спасибо!

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Спасибо большое )) пользовался Флаттером даже аппку написал по приколу ) но сейчас нет времени этим заниматься, однако, очень хотелось бы видео снять )

    • @BGD-Belarus-Game-Dev
      @BGD-Belarus-Game-Dev 4 года назад

      @@MobileDeveloper Спасибо за ответ. Разрабатываю на Flutter я не так долго, чтобы этому учить, но если нужна будет какая-то помощь или комментарий по нему, то буду рад помочь). Удачи!

  • @kovalevvvvv
    @kovalevvvvv 3 года назад

    Спс что смог налить воды в 13мин видосе добавляя термин и расшифровывая его, вместо того чтобы разговаривать просто xD. Ору с 8:22

  • @jessicalang3654
    @jessicalang3654 9 месяцев назад

    Пока искала кофе ролик уже закончился

  • @vitaliy2020
    @vitaliy2020 3 года назад

    Прочитал статью оставленную автором и на хабре, где чел реализовывал корутины в java.
    В основе корутин, я так понял лежат Генераторы,Итераторы,Continuation. Общий принцип основан на возможности функции возвращать несколько значений(Принцип работы Генератора), то есть мы можем выполнять код в функции до определенной строки, затем останавливаемся на некой точки останова и возвращаем значение(в Питоне эти ключевые слова называются yield) обратно откуда вызывали нашу функцию, затем у нас есть возможность продолжить выполнять нашу функцию на том месте где мы остановились до этого(Это реализовывают Iterator, Continuation), итератор к слову бегает по нашим точкам останова.
    В месте с тем корутины работают еще и с потоками, тоесть внутри корутин можно организовывать потоки для более тяжелых задач, я правильно понял? поправьте если что-то не так?

    • @MobileDeveloper
      @MobileDeveloper  3 года назад

      Типа того, там state машина, которая разбивает на n равное suspend points частей и по ним происходит перемещение ) если я опять же правильно понял объяснение Ильмира )

    • @vitaliy2020
      @vitaliy2020 3 года назад

      @@MobileDeveloper спасибо, честно говоря, как новичку ,который начинал с
      С++(не погружался в него сильно) и перейдя на java(более менее освоив его) концепцию корутин понять не просто из-за того, что в java нет аналогов, которые проясняют концепцию корутин, но тем кто начинал с Питона, будет гораздо яснее, что представляют из себя корутины

    • @MobileDeveloper
      @MobileDeveloper  3 года назад +1

      Скоро будет нечто похожее в Java ) погуглите Project Loom

    • @vitaliy2020
      @vitaliy2020 3 года назад

      И еще вычитал, что state machine(Автоматы в русской интерпретации) люди реализуют на плюсах, так , что по идее те, кто с этим имел дело, без труда поймет как работают корутины, ведь считай они заранее знают основу корутин изнутри получается

    • @vitaliy2020
      @vitaliy2020 3 года назад

      @@MobileDeveloper спасибо, прочитаю, в данный момент интересуюсь больше Котлином, так как в Андроиде он делает код лаконичным и читаемым, в общем попал я в переходное время, когда работодателя хотят и Котлин с корутинами и java с rx).учиться еще много, а работу пока первую не нашел(

  • @Woker2k20
    @Woker2k20 2 года назад

    Стоит. Спасибо

  • @bulletecho1077
    @bulletecho1077 2 года назад

    Крутой канал

  • @oleg12395
    @oleg12395 2 года назад

    Теперь вопрос, как можно вывести байткод как на 9:26 ? Пробую Tools->Kotlin->Show Kotlin Byte Code но получается абракадабра непонятная

  • @mr-re1ax
    @mr-re1ax 2 года назад

    🔥🔥🔥

  • @-Alexey-
    @-Alexey- 3 года назад

    Спасибо. А было бы здорово, если бы показали преимущество корутин на практике. Например какой-нить апи с коллбэками переделать под коррутины.

    • @MobileDeveloper
      @MobileDeveloper  3 года назад

      Думаю отдельное практическое видео сделать по корутинам, но чет их так много уже и так все разжевано, что не уверен нужно ли оно

  • @Юлия_23
    @Юлия_23 3 года назад

    Спасибо!

  • @alexandernifanin7366
    @alexandernifanin7366 4 года назад +1

    Пару лет программирую на корутинах и с радостью ушёл от RxJava. Как по мне, „реактивщина“ не так проста для понимания и программирования, как корутины. Особенно не нравились юнит-тесты. Поэтому перешёл и ни разу не пожалел. Никаких десятков функций со всякими подводными камнями. Всё как в нормальном программировании, гды сам решаешь, какая команда следует за какой.
    Корутины для Котлина гораздо обширнее в плане материала, сейчас там появились новые сущности. Пока я воспринимаю всё как магию, и это не мешает мне писать код. Не разбираюсь, почему и как работают потоки, почему что-то приостанавливается и когда возобновляется, ну и ничего страшного.
    Узнал, что корутины встроены в JetPack (lifecycle). Это прекрасно!

    • @MobileDeveloper
      @MobileDeveloper  4 года назад +2

      Да есть много вопросов ) Как я уже не раз говорил Rx - это в целом отдельная парадигма разработки и относиться к ней нужно именно так, а не как к способу решения простых асинхронных задач ) Вот у нас сейчас в Леруа как раз на Rx сделано вообще все - есть свои аналоги viewmodel, lifecycle, rxclicks и так далее и так далее. И я уже вижу в этом проблемы. Тем более в корутинах появился Flow и вообще хорошо стало )

  • @maksonic_official
    @maksonic_official 4 года назад

    Вот это тема!

  • @romanfedorov7638
    @romanfedorov7638 4 года назад

    Спасибо за обзор, очень полезно
    А может ли быть такое, что delay() первой функции закончится раньше, чем успеет отработать вторая? или они передают управление только по точкам остонова?

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Они передают управление по точкам остановки, но вполне может быть такое, что вторая функция даже с точкой остановки отработает быстрее ) однако корутина закончит работу тогда же когда и последняя suspend функция

    • @romanfedorov7638
      @romanfedorov7638 4 года назад

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

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Угу тут маленько другая концепция )

  • @ВладимирВованович-к3ч

    Так а если запустить тяжелую задачу в корутине на главном потоке она все равно зафризит UI?

  • @mrtwon8638
    @mrtwon8638 2 года назад

    👍👍👍

  • @karengozeyan2065
    @karengozeyan2065 4 года назад

    Будет ли видео про kotlin coroutines поподробнее?

    • @MobileDeveloper
      @MobileDeveloper  4 года назад +1

      Будет но не совсем в привычном формате )

  • @appngo6374
    @appngo6374 4 года назад

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

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Спасибо )
      Они могут работать и на главном потоке и на пуле из потоков, в зависимости от контекста, который вы укажете

    • @appngo6374
      @appngo6374 4 года назад

      @@MobileDeveloper ага, я так понял, что если назначаем MainCoroutineDispatcher, то работа происходит на мейне. Если же на одном из других, то на одном из пулов (IO, Common, Uncofined)

  • @georgeigoncharik6639
    @georgeigoncharik6639 4 года назад

    Вчера ехал на дом загородный и слушал IT talks. Так заслушался, что съезд с трассы пропустил и ещё несколько км успел проехать. У вас получается завлечь слушателя. С днём рождения!
    Upd: извиняюсь за тавтологию

  • @tyt66612
    @tyt66612 4 года назад

    Делай) 👍

  • @ОлегЧерных-в3р
    @ОлегЧерных-в3р 4 года назад

    Привет! Спасибо за видео! Не могли бы поделиться видением на перспективы мобильной разработки? Есть мнение что пользователям не нужно ничего кроме 20 приложений

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      О, на этот вопрос можно ответить слишком развернуто, запишу видео

  • @elron2010
    @elron2010 4 года назад

    1. Как будет выглядеть код если использовать suspend-функцию без delay() ?
    2. Как будет выглядеть код если использовать функцию delay() без suspend-функции ?

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      delay вы не сможете использовать без suspend функции, потому что delay сама по себе suspend, а suspend можно использовать только внутри suspend. Что касается первого вопроса, то если вы внутри будете использовать другую suspend функцию, то она точно также будет разделена на точки остановки.

  • @MrLOLs1
    @MrLOLs1 4 года назад

    Спасибо

  • @СергейПанов-з3ц
    @СергейПанов-з3ц 4 года назад +1

    Лучше без переводов... Если есть классная статья лучше кинуть её в чатик телеграмма или сообщество.
    10:53 это Вы не могли понять и полезли в исходники или автор статьи?

  • @kafychannel
    @kafychannel 4 года назад +1

    Ну что, есть ли где - нибудь песенка? На каком - нибудь ресурсе, я потёк)))))

  • @stasgermanov3709
    @stasgermanov3709 2 года назад

    Зачем вырубать заставку между примерами?

  • @oleg12395
    @oleg12395 2 года назад

    А как добавить корутиновские зависимости не в студию, а в простую идею ?

    • @oleg12395
      @oleg12395 2 года назад

      добавил гредл зависимости и все теперь работает implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1")

  • @kafychannel
    @kafychannel 4 года назад +1

    Что песня играет вначале видео?

    • @MobileDeveloper
      @MobileDeveloper  4 года назад +1

      Написал мой близкий друг, специально для этого видео

    • @kafychannel
      @kafychannel 4 года назад +1

      @@MobileDeveloper топовая, заела, в интернете можно скачать?)

    • @MobileDeveloper
      @MobileDeveloper  4 года назад +1

      Пока нет, но в процессе выкладывания на всякие ресурсы

  • @АлександрДворцов-ш1б

    начало с 3:54

  • @noraltavir
    @noraltavir 4 года назад +1

    Корутины вообще не про потоки. Я думаю, что вся концепция "легковесных потоков" вредная. Правильно говорить про синхронный и асинхронный код. Как он там на потоки бьется - дело десятое. Если говорить про ментальные модели, то можно себе представить себе синхронный код как прямое направление времени, а асинхронный код, как обратное направление времени (колбэк пишется перед тем кодом, в ответ на который он выполняется). Корутины позволяют нам "запускать время назад" и смотреть на инвертированную колбэчную модель как на прямую. Модель со встречными потоками кстати позволяет хорошо объяснить всякие проблемы, которые возникают, когда у нас синхронный код взаимодействует с асинхронным.
    Если кому будет интересно, можем записать потом короткий разговор на эту тему. Статью писать сил нет.

    • @MobileDeveloper
      @MobileDeveloper  4 года назад +1

      Я думаю надо поговорить ) там как раз в статье автор и говорит о том, что вот эти якобы легковесные потоки это очень вредная концепция которую изначально сказали просто, чтоб объяснить о чем вообще эта технология) я думаю надо обязательно про это поговорить, потому что очень редко понимание встречается )

    • @noraltavir
      @noraltavir 4 года назад

      @@MobileDeveloper Indeed. Если еще рядом Loom, который вот действительно про легковесные потоки и у народа в голове путанница. Важно понимать, что корутины в целом не про параллельное программирование и именно для гомогенных параллельных вычислений - это вероятно не лучшее решение.

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Ну у нас больше здесь в разрезе мобильных приложений все ) а у нас прям параллельных вычислений не много ) чаще наоборот получить запрос после ещё запрос и показать результат )

  • @AntonParonko
    @AntonParonko 4 года назад +1

    Не зря в 6 утра встал 😂

    • @annaumova
      @annaumova 4 года назад

      аналогично

    • @MobileDeveloper
      @MobileDeveloper  4 года назад +1

      Спасибо ))) Анна вы же на патреоне есть там это видео две недели назад появилось )

  • @mamyna_bysinka
    @mamyna_bysinka 4 года назад

    Блин всегда хотел переехать с Rx, но толкового за и против не мог всегда найти (((

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Ну на мой взгляд если уже все написано то и переезжать особо пока смысла нет. Разве что конкретный план есть. А новый я бы с корутин начинал. Они эффективнее по памяти и производительнее )

    • @mamyna_bysinka
      @mamyna_bysinka 4 года назад

      @@MobileDeveloper ну чисто ради интереса раньше смотрел разницу по скорсти между корутиной и RX, в итерации к 1 милиону и выводу данных в консоль. Да разница есть но не оссобенно. Но в общем да - если легаси кончится, то будет только котлин + корутины.

  • @random_ni
    @random_ni 4 года назад

    8:30 пропустил оговорку на монтаже

    • @ИлиаМинаев
      @ИлиаМинаев 4 года назад +1

      8:18 если точнее, но я чет уганрул)

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Хаха точно ) бывает такое ( постараемся больше не допускать

  • @vadimosovsky
    @vadimosovsky 4 года назад

    Алексей, где Флаттер?

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Да вот все не успеваю никак

  • @Ast991
    @Ast991 4 года назад +6

    Как всегда много воды и мало толку

    • @MobileDeveloper
      @MobileDeveloper  4 года назад +1

      Жду вашего видео, чтобы поучиться у вас )))

    • @maxim.hnatiuk
      @maxim.hnatiuk 4 года назад

      @@MobileDeveloper он создал Jarvis'a, корутины для него семечки:)

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Да уж прошу прощения 😂

    • @Ast991
      @Ast991 4 года назад +1

      @@maxim.hnatiuk корутины не гибкие по сравнению с той же рыксой. "Легковестность" - это сказки. А предлог, сними видео, а потом комментируй как минимум глупый. Автор или сам не понимает как это работает, или не умеет просто обьяснить сложные вещи.

    • @maxim.hnatiuk
      @maxim.hnatiuk 4 года назад

      @@Ast991 лично мне было все понятно.

  • @Бардзо
    @Бардзо Год назад

    Ну так-то видео пили плохое

  • @theprogrammer256
    @theprogrammer256 3 года назад

    Малопонятный вдребезги ролик ( Тема нужная и интересная но видео откровенно неудачное

    • @MobileDeveloper
      @MobileDeveloper  3 года назад +1

      Многие в комментариях не согласны с вами, но как говорится у вас есть право на своё мнение )

    • @theprogrammer256
      @theprogrammer256 3 года назад

      @@MobileDeveloper Алексей, извините. Забыл сказать главное - спасибо вам за видеоуроки! Уроки по RxJava мне очень помогли. Смотрю все ваши ролики. Отличный канал! Ну один ролик не зашел - бывает. Всем не угодишь :)

    • @MobileDeveloper
      @MobileDeveloper  3 года назад +1

      Согласен, бывает ) рад, что ролики помогают )

  • @oleg12395
    @oleg12395 2 года назад

    import kotlinx.coroutines.async
    import kotlinx.coroutines.delay
    import kotlinx.coroutines.joinAll
    import kotlinx.coroutines.runBlocking
    fun main() = runBlocking {
    println("Main start")
    joinAll(
    async { coroutine(1, 3000) },
    async { coroutine(2, 300) }
    )
    println("Main end")
    }
    suspend fun coroutine(number: Int, delay: Long){
    println("Routine number $number starts work")
    delay(delay)
    println("Routine number $number finished")
    } //Что может быть не так ?

    • @oleg12395
      @oleg12395 2 года назад

      део было в зависимостях implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1")