#Kotlin #Coroutines #Concurrency
В продолжение своей серии статей о concurrency и корутинах Роман Елизаров поведывает о том как ситанксис Kotlin позволяет явно писать асинхронный вызовы и управлять ими
https://medium.com/@elizarov/explicit-concurrency-67a8e8fd9b25
В продолжение своей серии статей о concurrency и корутинах Роман Елизаров поведывает о том как ситанксис Kotlin позволяет явно писать асинхронный вызовы и управлять ими
https://medium.com/@elizarov/explicit-concurrency-67a8e8fd9b25
Medium
Explicit concurrency
Concurrency is important in the modern world, but we need to be explicit about it.
#Kotlin #Coroutines #Concurrency
CONCURRENT COROUTINES – CONCURRENCY IS NOT PARALLELISM
Все мы стараемся ускорить работу наших приложений. Один из эффективных способов повысить скорость выполненной работы - это выполнять задачи парареллельно и не на главном потоке приложения.
Часто в программирвоание паррарельное выполнение программ связывают с понятием concurrent.
В стастье вы найдете различие между понятием concurrency и parallelism и как это реализуют корутины в Kotlin.
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! До встречи 👋
Участие бесплатно по предварительной регистрации. Количество билетов ограничено
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
Реализация примера на корутинах:
Реализация на RxJava:
В дополнение можно сказать что Coroutine выигрывают еще в том что они не блокируют потоки и позволяют во время ожидания выполняться на них других операциям, что позволяет более эффективно использовать пулл I/O.
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.
PODLODKA #102: Многопоточность
Многие её побаиваются, и не исключено, что кто-то из-за неё даже заваливал собеседования на особо каверзных вопросах. Многопоточность! Что это такое, и с чего все началось? Чем отличаются concurrency и параллелизм, как это все работает? Об этом всём мы поговорили с человеком, чья работа (помимо всего прочего) – проектировать механизм корутин в языке Kotlin. У нас в гостях Роман Елизаров из JetBrains.
podlodka.tilda.ws
Podlodka #102 — Многопоточность
Многие её побаиваются, и не исключено, что кто-то из-за неё даже заваливал собеседования на особо каверзных вопросах. Многопоточность! Что это такое, и с чего все началось? Чем отличаются concurrency и параллелизм, как это все работает? Об этом всём мы поговорили…
#Coroutines #Thread #Concurrency #Parallelism
Kotlin coroutines, threads, concurrency and parallelism 101
Довольно наглядное и простое объяснение разнице в работе потоков и Coroutine
Kotlin coroutines, threads, concurrency and parallelism 101
Довольно наглядное и простое объяснение разнице в работе потоков и Coroutine
Medium
Kotlin coroutines, threads, concurrency and parallelism 101
Threads are being replaced by coroutines, parallelism by concurrency…but what is the difference?
#Concurrency #Java
Что такое ExecutorService?
Android разработке не стоит забыть про Java API, как оно работает и что применять. В статье разбирается ExecutorService, который позволяет управлять пулами потоков и получать результат асинхронной операции.
Что такое ExecutorService?
Android разработке не стоит забыть про Java API, как оно работает и что применять. В статье разбирается ExecutorService, который позволяет управлять пулами потоков и получать результат асинхронной операции.
#concurrency #многопоточность
Многозадачность и многопоточность — распространенные заблуждения и недопонимания
Вечная и важная тема в современной разработке. Читать статью обязательно, чтобы лучше понять разницу и выражаться правильно!
Многозадачность и многопоточность — распространенные заблуждения и недопонимания
Вечная и важная тема в современной разработке. Читать статью обязательно, чтобы лучше понять разницу и выражаться правильно!
Глубокое погружение в Java Memory Model
Если вы столкнулись с таким вопросом на собеседование, то вам будет полезно почитать. Если нет - вооружитесь знаниями заранее. Из статьи вы узнаете про:
👉 Java Memory Model (JMM)
👉 Memory Ordering
👉 Sequential Consistency
👉 Happens-before
Материал большой, но позволит вам разобраться
#concurrency #java
Если вы столкнулись с таким вопросом на собеседование, то вам будет полезно почитать. Если нет - вооружитесь знаниями заранее. Из статьи вы узнаете про:
👉 Java Memory Model (JMM)
👉 Memory Ordering
👉 Sequential Consistency
👉 Happens-before
Материал большой, но позволит вам разобраться
#concurrency #java
Многопоточность Java
Хоть вы давно и пишите на Kotlin, но правила работы с потоками Java и синхронизацию данных никто не отменял. Повторите или изучите обязательно!
#concurrency
Хоть вы давно и пишите на Kotlin, но правила работы с потоками Java и синхронизацию данных никто не отменял. Повторите или изучите обязательно!
#concurrency
Статья про многопоточность для чайников (26 мин)
👉 Что такое многопоточность
👉 Запуск приложения системой
👉 Создание главного потока в приложении
👉 Один поток vs множество
👉 Как происходит создание нового потока
👉 Основные принципы и примеры использования RxJava и Kotlin Coroutines.
👉 RxJava VS Kotlin Coroutines
#concurrency
👉 Что такое многопоточность
👉 Запуск приложения системой
👉 Создание главного потока в приложении
👉 Один поток vs множество
👉 Как происходит создание нового потока
👉 Основные принципы и примеры использования RxJava и Kotlin Coroutines.
👉 RxJava VS Kotlin Coroutines
#concurrency