Android Broadcast
14.1K subscribers
3.38K photos
275 videos
11 files
5.67K links
Подборка новостей и статей для Android разработчиков.

Связь с автором @android_broadcast_bot
Реклама @android_broadcast_bot

РКН https://abdev.by/rkn_tg_ab
Download Telegram
#Kotlin #Coroutines #Concurrency

В продолжение своей серии статей о concurrency и корутинах Роман Елизаров поведывает о том как ситанксис Kotlin позволяет явно писать асинхронный вызовы и управлять ими

https://medium.com/@elizarov/explicit-concurrency-67a8e8fd9b25
#Kotlin #Coroutines #Concurrency

CONCURRENT COROUTINES – CONCURRENCY IS NOT PARALLELISM

Все мы стараемся ускорить работу наших приложений. Один из эффективных способов повысить скорость выполненной работы - это выполнять задачи парареллельно и не на главном потоке приложения.

Часто в программирвоание паррарельное выполнение программ связывают с понятием concurrent.

В стастье вы найдете различие между понятием concurrency и parallelism и как это реализуют корутины в Kotlin.
#AndroidAcademy #Concurrency #Coroutines #Rx

Android Academy Minsk #2: Threading

Сегодня пройдет встреча Android Academy 😎, на которой я расскажу о как делать многопоточными приложения в Android. В программе:
1️⃣ Как работает Handler/Looper механизм в Android
2️⃣ RxJava: основы подхода, в чем ее сила и как она может стать болью в вашем проекте
3️⃣ Kotlin Coroutines: основы идеи, отличие от блокирующего подхода, основы работы с корутинами, structured concurrency
4️⃣ Подводные камни многопоточной разработки

Проведите вечер понедельника с пользой и приходите в Space (Октябрьская 10Б). Мы начинаем ровно в 19:00! До встречи 👋

Участие бесплатно по предварительной регистрации. Количество билетов ограничено
#Rx #Coroutines #Concurrency

Understanding CPU- and I/O-bound for asynchronous operations

В современных приложениях мы выносим обработку долгих операций на фоновые потоки. Знаете ли Вы какие операции надо запускать на этих пулах потоков, а самое главное почему? Почему не использовать единый пул для всех фоновых операций? Зачем в Kotlin Coroutines и RxJava есть понятия I/O-bound и CPU-bound.

Причиной этому является как I/O операции ведут себя по сравнению к CPU интенсивным операция. Чтение данных из файлов, потоков, сокетов или сети часто содержит много ожидания: подключение к источнику, дождаться ответа и только потом идет его реальная передача, которая может также приостанавливаться из-за низкой скорости или загруженности. Операции не связанные с чтение не из оперативной памяти вызывают IOwait - системный вызов, который сообщает процессору о необходимости приостановить выполнение текущего потока, пока данные станут доступны или будут успешно переданы.

Важно помнить, что потоки, выполняющие I/O операции, проводят значительную часть времени в ожидании. При маленьком пуле потоков, выделенных для таких операций у вас может быть простой приложения.

С другой стороны, если рассмотреть операции которые интенсивно используют CPU, например процессинг изображений, тяжелые расчеты и пр., то для таких операций нет блокирующих событий как IOwait и потоки приостанавливаются только на основе механизма распределения ресурсов в ОС.

Подведя итоги описанной выше разницы работы задача с IO и CPU можно понять что:
👉 CPU и I/O операции стоит выполнять в разных пулах потоков
👉 пул для CPU интенсивных операций должен опираться на количество ядер в устройстве и не превышать его
👉 пул для I/O операций может быть довольно большим

Рассмотрим пример:
1️⃣ Скачаем картинку из сети
2️⃣ Сделаем ей blur
3️⃣ Отобразим ее на устройстве

Мы имеем 3 разных пула, которы надо использовать:
1️⃣ I/O
2️⃣ CPU
3️⃣ Main

Реализация примера на корутинах:
launch(Dispatchers.IO) {
val image = api.fetchImageAsync(url).await()
val blurred =withContext(Dispatchers.Default) {
image.blur()

}
withContext(Dispatchers.Main) {
displayImage(blurred)
}
}

Реализация на RxJava:

api.fetchImageObservable(url)
.subscribeOn(Schedulers.io()
.observeOn(Schedulers.computation())
.map { blurImageSync(it) }
.observeOn(AndroidSchedulers.mainThread())
.subscribe { displayImage(it) }

В дополнение можно сказать что Coroutine выигрывают еще в том что они не блокируют потоки и позволяют во время ожидания выполняться на них других операциям, что позволяет более эффективно использовать пулл I/O.
#Podcast #Concurrency #Kotlin

PODLODKA #102: Многопоточность

Многие её побаиваются, и не исключено, что кто-то из-за неё даже заваливал собеседования на особо каверзных вопросах. Многопоточность! Что это такое, и с чего все началось? Чем отличаются concurrency и параллелизм, как это все работает? Об этом всём мы поговорили с человеком, чья работа (помимо всего прочего) – проектировать механизм корутин в языке Kotlin. У нас в гостях Роман Елизаров из JetBrains.
#Concurrency #Java

Что такое ExecutorService?

Android разработке не стоит забыть про Java API, как оно работает и что применять. В статье разбирается ExecutorService, который позволяет управлять пулами потоков и получать результат асинхронной операции.
#concurrency #многопоточность

Многозадачность и многопоточность — распространенные заблуждения и недопонимания

Вечная и важная тема в современной разработке. Читать статью обязательно, чтобы лучше понять разницу и выражаться правильно!
Глубокое погружение в Java Memory Model

Если вы столкнулись с таким вопросом на собеседование, то вам будет полезно почитать. Если нет - вооружитесь знаниями заранее. Из статьи вы узнаете про:
👉 Java Memory Model (JMM)
👉 Memory Ordering
👉 Sequential Consistency
👉 Happens-before

Материал большой, но позволит вам разобраться

#concurrency #java
Многопоточность Java

Хоть вы давно и пишите на Kotlin, но правила работы с потоками Java и синхронизацию данных никто не отменял. Повторите или изучите обязательно!

#concurrency
Статья про многопоточность для чайников (26 мин)
👉 Что такое многопоточность
👉 Запуск приложения системой
👉 Создание главного потока в приложении
👉 Один поток vs множество
👉 Как происходит создание нового потока
👉 Основные принципы и примеры использования RxJava и Kotlin Coroutines. 
👉 RxJava VS Kotlin Coroutines

#concurrency