Kotlin coroutines: использование синхронного использования cassandra vs для перевода асинхронного использования

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

С Kotlin я могу либо использовать асинхронные методы Cassandra, а затем обернуть их интеграцией ListenableFuture или использовать синхронные методы Cassandra и обернуть их использование с помощью метода приостановки и запуска / async.

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

Является ли это очевидным ответом для людей, более опытных с сопрограммами, или есть конкретные области, где «это зависит»?

Это зависит от внутренних деталей используемой библиотеки и от ваших целей производительности / масштабируемости:

  • Если ваша библиотека внутренне асинхронна, тогда было бы целесообразно использовать ее через собственный асинхронный API. Отказ от ответственности: я понятия не имею, как Cassandra структурирована внутри (синхронизация или асинхронный).
  • Если ваша библиотека внутренне синхронна / блокирована (и большинство устаревших библиотек), то это зависит от:
    • Если ваше приложение привязано к IO (читает / записывает много байтов в / из сети / диска), и вы оптимизируете его для пропускной способности (максимизируя количество обработки байтов при больших пакетных нагрузках), тогда, как правило, вы лучше использовать синхронные / блокирующие API.
    • Если ваше приложение привязано к памяти, и вы хотите масштабировать его до более параллельных подключений / запросов, то, как правило, вам будет лучше использовать асинхронные API.