Kotlin Coroutines: следует ли выполнять ресурсоемкие задачи на Dispatcher.Default или Dispatcher.IOAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Kotlin Coroutines: следует ли выполнять ресурсоемкие задачи на Dispatcher.Default или Dispatcher.IO

Сообщение Anonymous »

Я работаю над проектом Android с использованием сопрограмм, и у меня есть последовательность операций, которая включает в себя задачи, связанные как с операциями ввода-вывода, так и с нагрузкой на процессор. Вот как выглядит мой процесс:
  • Извлечение данных из сети (с привязкой к вводу-выводу).
  • Разбор извлеченных данных. данные (привязка к процессору).
  • Сохранение проанализированных данных в базе данных (привязка к вводу-выводу).
  • Извлечение сохраненных данных из базы данных ( IO-bound).
Изначально я планировал выполнить весь процесс внутри блока withContext(Dispatcher.IO). Однако я не уверен, что это лучший подход, особенно для этапа синтаксического анализа, который требует большого количества ресурсов ЦП.
Вот упрощенная версия моего текущего кода:

Код: Выделить всё

viewModelScope.launch {
withContext(Dispatcher.IO) {
// Step 1: Get data from the network (IO-bound)
val data = fetchDataFromNetwork()

// Step 2: Parse the data (CPU-bound)
val parsedData = parseData(data)

// Step 3: Save parsed data to the database (IO-bound)
saveDataToDatabase(parsedData)

// Step 4: Retrieve data from the database (IO-bound)
val retrievedData = getDataFromDatabase()

// Step 5: Use the retrieved data
useRetrievedData(retrievedData)
}
}
Я читал, что задачи, интенсивно использующие ЦП, следует выполнять в Dispatcher.Default, чтобы избежать блокировки потоков ввода-вывода, но я не совсем уверен, необходимо ли это в данном случае. Мои вопросы:
Что именно квалифицируется как задача с интенсивным использованием ЦП в контексте сопрограмм?
Будет ли анализ данных считаться задачей с интенсивным использованием ЦП?
Следует ли Я перенес этап синтаксического анализа в Dispatcher.Default, и если да, то каков будет оптимальный способ структурирования моей сопрограммы?
Мое намерение состояло в том, чтобы использовать для выполнения варианта использования под одним Dispacter. ИО

Код: Выделить всё

suspend fun  executeNow(useCase: UseCase, values: T): Result
{
useCase.requestValues = values

return withContext(Dispatchers.IO) {
useCase.run()
}
}
Теперь вариант использования будет выполняться внутри потока ввода-вывода, а внутри сценария использования, когда репозиторий получит значение из сети, должен ли я переключиться внутри потока ввода-вывода на поток по умолчанию для анализа, получили данные, чтобы возразить против моей модели? Или оптимально выполнять работу в самом потоке ввода-вывода?

Подробнее здесь: https://stackoverflow.com/questions/786 ... er-default
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»