Kotlin协同程序:包装cassandra同步使用vs翻译异步使用

这个问题可能也适用于其他图书馆,但使用卡桑德拉作为一个具体的例子,以确保我要求一个可回答的问题:

使用Kotlin,我可以使用Cassandra的异步方法,然后使用ListenableFuture集成来包装它们, 可以使用Cassandra的同步方法,并使用暂停方法和启动/异步来包装它们的用法。

我在猜测,更好的方法是使用库的现有异步方法,假定更容易避免死锁并且更快,但是我猜测并且对于协程是新的。

对于更熟练的协同工作者来说,这是一个显而易见的答案,还是有“依赖”的特定领域?

这取决于您正在使用的库的内部细节和性能/可伸缩性目标:

  • 如果你的库是内部异步的,那么总是建议通过它的本地异步API来使用它。 免责声明:我不知道如何Cassandra内部结构(同步或异步)。
  • 如果你的库是内部同步/阻塞(和大多数遗留库),那么它取决于:
    • 如果您的应用程序是IO绑定的(从网络/磁盘读取/写入大量字节),并且您正在优化吞吐量(在大批量加载时最大化字节数),那么根据经验会更好地使用同步/阻塞API。
    • 如果您的应用程序是内存绑定的,并且您想要将其扩展到更多的并发连接/请求,那么根据经验,您将更好地使用异步API。