No video

#2 CoroutineContext. Настраиваем корутины || Курс по корутинам

  Рет қаралды 34,869

Android Broadcast. Все об Андроид разработке

Android Broadcast. Все об Андроид разработке

Күн бұрын

Пікірлер: 71
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
💰 Поддержать проект на Boosty boosty.to/androidbroadcast 🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast 🔗 Telegram канал "Kotlin Broadcast" ttttt.me/android_broadcast
@vladislavaliev2894
@vladislavaliev2894 2 жыл бұрын
Кирилл, спасибо за годноту и за вклад в community! Ты делаешь этот мир лучше)
@danzolax6885
@danzolax6885 2 жыл бұрын
Лучший утренний контент перед работой)
@user-by1id2ix4h
@user-by1id2ix4h 2 жыл бұрын
Кирилл, спасибо за шикарный контент Коротко и без воды, шикарный формат А кому что-то не понятно - гугл в помощь) Если бы автор рассказывал о каждой мелочи - то видео бы получилось очень длинным и не охватило бы такую широкую аудиторию, которую охватывает сейчас Так как для тех, кто, что-то знает по корутинам - было бы много воды
@zoompartyru
@zoompartyru 2 жыл бұрын
Кирилл, спасибо за отличный контент по kotlin coroutines!
@mikeshilovski1512
@mikeshilovski1512 2 жыл бұрын
Я уже разбираюсь в корутинах, но мне кажется если бы до этого с корутинами не работал было бы сложно все это понять, даже после rx
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Я сам их не понял с первого раза и не думаю что такую концепцию легко сразу понять с первого раза
@lordraiden_do
@lordraiden_do 2 жыл бұрын
Лучший контент в утро субботы!
@speedrages
@speedrages 2 жыл бұрын
Да, присоединюсь. Супер подача, коротко и не напряжно. Вопрос от новичка. Как практиковаться в этом? С чего начать практику? Как именно ты начинал практиковаться. Именно начинал. Смотрю разные источники, везде много теории и элементарные примеры, но хотелось бы примеров посложнее, причем с нарастающим уровнем сложности. Буду рад получить ответ, но даже если не получу, все равно продолжу смотреть тебя👍
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Я практиковался уже с опытом в разработке, так что просто взял pet проект или начал писать его чтобы попробовать технологию. + повезло что на работе смог затащить корутины даже в альфа версии в 2017
@speedrages
@speedrages 2 жыл бұрын
@@AndroidBroadcast посоветуете как начать практику без опыта, если есть представление как это сделать?
@UUU161
@UUU161 Жыл бұрын
@@speedrages если ты серьезно задаешь такие вопросы, то лучше и не начинать
@microdevices
@microdevices 2 жыл бұрын
Кратко и по существу
@A-pe5yy
@A-pe5yy 2 жыл бұрын
Спасибо за материал!
@Mostwonted7
@Mostwonted7 2 жыл бұрын
Спасибо за знания) успехов тебе)
@KekLolChill
@KekLolChill 2 жыл бұрын
Балдежный курс
@evgeniybutov2792
@evgeniybutov2792 2 жыл бұрын
Кирилл, спасибо, полезно, интересно ;)
@user-eg1vb9fn5g
@user-eg1vb9fn5g 2 жыл бұрын
Отличное начало курса, в голове прям щелкает от понимания 😄 Отсюда у меня возник вопрос: можно ли указать саспенд функции, что она должна быть запущена в определенном диспатчере? Я видел вариант, что тело функции можно обернуть в нужный withContext, но не хотелось бы лишний раз переключаться
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Тот способ через withContext и есть который используется для вызова функции в необходимом контексте, другого пути я не видел
@artyoms5186
@artyoms5186 2 жыл бұрын
Я так понимаю, что withContext и есть рекомендуемый подход, плюс вообще все функции лучше проектировать main-safe, что если функция может заблочить main поток, ей нужно самой переключить контекст на всякий случай
@user-eu6tc6zz5v
@user-eu6tc6zz5v 2 жыл бұрын
Кирилл, ты случайно не оговорился на 4:55, когда сказал, что в пуле потоков IO количество потоков не менее 64? Другие источники говорят "не БОЛЕЕ 64". Присоединяюсь к благодарностям за чертовски годный курс по корутинам!
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Можно посмотреть формулу в исходниках. Для IO максимальный размер пулла очень большой, но все эти потоки создаются по необходимости
@user-ol2jd2tl7m
@user-ol2jd2tl7m Жыл бұрын
Спасибо
@kickout367
@kickout367 2 жыл бұрын
Ну тогда ждем урок еще завтра)))
@SerhiyRadkivskyi
@SerhiyRadkivskyi 2 жыл бұрын
Вот рекомендую отличный мини курс молодого бойца по корутинам, уверен его можно еще даже расширить и дополнить примерами: kzfaq.info/sun/PLQkwcJG4YTCQcFEPuYGuv54nYai_lwil_
@A-pe5yy
@A-pe5yy 2 жыл бұрын
спасибо!👍
@alexpro8317
@alexpro8317 2 жыл бұрын
На счёт оберток для провайда диспетчеров, мы отказались от этой штуки, т.к. появилась возможность в тестах напрямую сетить диспетчер в класс Dispatchers. Тесты от этого никак не пострадали, а куча классов убрала лишнюю зависимость, которая больше мозолила глаза
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Сетать напрямую можно только Main Dispatcher, или я что-то упустил в обновлениях?
@arturmorozov4075
@arturmorozov4075 2 жыл бұрын
Кирилл, спасибо за видео! На 3:33 кажется не совсем корректная инфа - родитель у которого SupervisorJob не отменяется ведь сам при ошибке в дочерней корутине
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Верно. Надо будет поправить
@Nerubianify
@Nerubianify 2 жыл бұрын
Спасибо! По поводу ссылки на енам, не увидел в описании(
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Добавлю немного позже
@RebootSMR
@RebootSMR 2 жыл бұрын
В курсе будет какое-нибудь (например, итоговое) видео с разбором того, во что компилятор преобразовывает корутину и как она под капотом работает?
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Нет
@RebootSMR
@RebootSMR 2 жыл бұрын
@@AndroidBroadcast спасибо за ответ) а мне на работе уже пару коллег советовали извучить данный вопрос
@user-gc9rm5yo1y
@user-gc9rm5yo1y Жыл бұрын
Спасибо огромное за серию видео. Материал немного сложный, пересматриваю повторно. Вопрос что будет если использовать Default dispatcher с IO операциями? Если при этом Default пул потоков загружен сложной математикой, то часть ядер процессора будут недозагружены?
@AndroidBroadcast
@AndroidBroadcast Жыл бұрын
Default и IO настроены с учётом специфики такого рода операций, если вы выберите неправильно -ничего страшного нет
@user-ip5nu2uc4z
@user-ip5nu2uc4z 10 ай бұрын
Кирилл, можете пояснить один момент? Функция Join приостанавливает коррутину пока job'а не выполниться(Suspends the coroutine until this job is complete. ) Если Job это абстракция над коррутингой, то как она может выполняться с приостановленной корутиной? В некоторых статьях вижу такую формулировку "Например, его метод join() позволяет ожидать, пока корутина не завершится"
@AndroidBroadcast
@AndroidBroadcast 10 ай бұрын
При создание корутины через launch или async вы получаете объект Job, который и представляет её. join() - это suspend функция, которая приостановит корутину в которой была вызвана, до тех пор пока не будет выполнена Job (корутина) у которой вызвали join()
@alexpro8317
@alexpro8317 2 жыл бұрын
Ещё не хватило инфы про переключение контекста с помощью withContext) о его плюсах и минусах
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Оно будет в следующем видео
@andreyterehin9188
@andreyterehin9188 2 жыл бұрын
Благодарю за этот курс! Круто Подскажите пожалуйста какой контекст нужно использовать в CoroutineScope для работы с базой , когда корутина что-то вытаскивает из Room ? У меня, например val coroutineScope = CoroutineScope(Dispatchers.Default), но не уверен, что это правильно
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Лучше взять IO, так как БД - это чтение/запись с/на диск
@BelokonRoman
@BelokonRoman 2 жыл бұрын
Если в Dao у метода прописать suspend, то запросы будут выполнятся на Room-овском Dispatcher-е и не надо использовать какой то другой диспатчер. Такое же поведение и у Retrofit-a
@user-eh2jg6oh5b
@user-eh2jg6oh5b Жыл бұрын
@@BelokonRoman , а с Realm такое возможно?
@BelokonRoman
@BelokonRoman Жыл бұрын
@@user-eh2jg6oh5b не знаю, я с Realm не работаю.
@mukhtarbimurat5106
@mukhtarbimurat5106 2 жыл бұрын
спасибо за крутой контент. Одно не понял: Зачем нужен лишние потоки (64 потоков) для io если у нас 8 процессоров (кажется 8 потоков достаточна)? Вед корутины (в отличий от обычных потоков) освобождают свой поток при блокирующем вызове (например запрос в сеть). То есть потоки никогда не будут в wait состояние и нет необходимости для context switch
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Для того чтобы так происходило, I/O должен быть тоже suspend, но пока он только блокирующий (
@mukhtarbimurat5106
@mukhtarbimurat5106 2 жыл бұрын
@@AndroidBroadcast то есть сейчас при io запросах (в отличий от delay() допустим) поток не освобождается? Или я чето не понял? В первом видео вроде в обратном говорили: что несколько корутин могут в отдом потоке выполнятся
@andreyliashuk2516
@andreyliashuk2516 2 жыл бұрын
Я где-то давно читал, что IO dispatcher умеет только расширяться, но не умеет утилизировать ненужные потоки. Ты не знаешь, они уже это поправили или так и осталось?
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Без понятия такой подробности. Но каждый раз уничтожать потоки и убивать их невыгодно, так что такое поведение оправдано
@andreyliashuk2516
@andreyliashuk2516 2 жыл бұрын
@@AndroidBroadcast Тут проблема, что если во время каких-то нагрузок количество потоков сильно увеличится(например до 40), то потом они будут простаивать. Думаю именно по этому и создали limitedParallelism.
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Да, там его и в Changelog так и объяснили
@s.a.3408
@s.a.3408 Жыл бұрын
В IO количество потоков равно количеству ядер процессора, но не меньше 64х? Т.е. всегда не меньше 64х? Потому что я не знаю SOC, в котором есть столько ядер) Upd. Разобрался в вопросе. На самом деле, по умолчанию в IO НЕ БОЛЬШЕ 64х потоков.
@SpinQuarK26
@SpinQuarK26 2 жыл бұрын
Почему вы советуете не использовать Dispatchers напрямую, а закидывать их обёртку через DI? Я пользуюсь ими напрямую, не могу вспомнить, чтобы возникали проблемы с этим
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Проблем нет, но вот в тестах из удобнее подменять
@nadzeyakondrat184
@nadzeyakondrat184 2 жыл бұрын
Привет Спасибо за курс. Воспрос: может ли входить main-поток в пул потоков Default dispatcher?
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Нет, в том то и суть чтобы разгрузить главный поток
@user-eu3ln9ys9y
@user-eu3ln9ys9y 2 жыл бұрын
Привет Я правильно понимаю, что пул потоков, при использовании Dispatcher.IO состоит из нативныех потоков (которых ещё 64)? Буду очень благодарен за ответ, давно не могу разобраться в этом простом вопросе
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
64 - это максимум. Потоком создаются отложенно по необходимости
@user-not_defined
@user-not_defined 2 жыл бұрын
Что значит интенсивно вычислительных операций? main же главный поток вроде
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Главный поток больше служит как координатор и гарант последовательного вызова. Например, работа с UI, запуск асинхронных операций на других потоках и применение их результата, системные вызовы. Этот потом должен быть загружен как можно меньше, так как в него попадают все взаимодействия пользователя с экраном
@user-hu8uw3fr6m
@user-hu8uw3fr6m Жыл бұрын
Очень красивое лицо, но лучше было бы смотреть на код, который мелькает не понятно для чего. Речь лучше не как на рынке при навязывании товара, а помедленнее, если, конечно же, это разъяснение для новичков, а не хвастаство перед равными.
@maksbragin
@maksbragin 2 жыл бұрын
Как всегда, поверхностно, без объяснения. Тем, кому это действительно важно и они хотят понять, здесь делать нечего. Элементарный пример, ИО, ИО... Не все кто хочет разобраться с корутинами знают, что это абревиатура InputOutput и для чего этот поток. В общем как и с даггером, контент ради контента, а не для людей...
@maksbragin
@maksbragin 2 жыл бұрын
Коммент не критики ради, просто хочется действительно толкового объяснения, а не просто пересказ доки.
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Ещё раз - это контент не для новичков, а уже понимающих профессию. Пишите вопросы и я сделаю доп разбор со всеми пояснениями. Знаете как сделать лучше, покажите мне своим примерос
@SerhiyRadkivskyi
@SerhiyRadkivskyi 2 жыл бұрын
Вот рекомендую отличный мини курс молодого бойца по корутинам, уверен его можно еще даже расширить и дополнить примерами: kzfaq.info/sun/PLQkwcJG4YTCQcFEPuYGuv54nYai_lwil_
@dmitriymitroshin7525
@dmitriymitroshin7525 2 жыл бұрын
Комментарий.
@konstantinchernyaev3011
@konstantinchernyaev3011 2 жыл бұрын
2:53 2 и 4 одинаковые вроде
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Ага, проверю. Спасибо
@Chernov1984
@Chernov1984 2 жыл бұрын
+
#3 Жизненный цикл корутины. CoroutineScope. Structured Concurrency || Курс по корутинам
10:49
Android Broadcast. Все об Андроид разработке
Рет қаралды 27 М.
#1 Что такое корутина. Важные особенности || Курс по корутинам
16:40
Android Broadcast. Все об Андроид разработке
Рет қаралды 89 М.
Unveiling my winning secret to defeating Maxim!😎| Free Fire Official
00:14
Garena Free Fire Global
Рет қаралды 6 МЛН
КТО ЛЮБИТ ГРИБЫ?? #shorts
00:24
Паша Осадчий
Рет қаралды 1,3 МЛН
CHOCKY MILK.. 🤣 #shorts
00:20
Savage Vlogs
Рет қаралды 30 МЛН
Основы DI и Dagger, как работает, настройка в проекте
17:31
Android Broadcast. Все об Андроид разработке
Рет қаралды 67 М.
Как запускать задачи в фоне на Android. РАЗБОР
26:42
Android Broadcast. Все об Андроид разработке
Рет қаралды 5 М.
Как устроен Android и его приложения.
30:29
Sergey Arkhipov Java Tutorials
Рет қаралды 20 М.
Корутины
1:51:55
Young&&Yandex: мобильная разработка
Рет қаралды 14 М.
#5 Каналы. Зачем если есть Flow? || Курс по корутинам
6:37
Android Broadcast. Все об Андроид разработке
Рет қаралды 18 М.
Docker Для Начинающих за 1 Час | Docker с Нуля
52:43
Unveiling my winning secret to defeating Maxim!😎| Free Fire Official
00:14
Garena Free Fire Global
Рет қаралды 6 МЛН