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

时间:2017-10-11 16:15:31

标签: kotlin kotlinx.coroutines

这个问题也可能适用于其他图书馆,但是使用Cassandra作为一个具体的例子,试图确保我问一个可回答的问题:

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

我猜测更好的技术是使用库的现有异步方法,假设它更容易避免死锁并且更快,但我猜测并且是协同程序的新手。

这对于更有经验的协同程序的人来说是否是一个明显的答案,或者是否存在“依赖于”的特定领域?

1 个答案:

答案 0 :(得分:2)

这取决于您使用的库的内部详细信息以及性能/可伸缩性目标:

  • 如果您的库是内部异步,那么始终建议通过其本机异步API使用它。免责声明:我不知道Cassandra是如何在内部构建的(同步或异步)。
  • 如果您的库是内部同步/阻塞(并且大多数是旧版库),那么它取决于:
    • 如果您的应用程序是IO绑定的(读/写大量字节到/从 网络/磁盘),你正在优化吞吐量(最大化 大批量加载时处理的字节数),然后,作为规则 拇指,你会更好地使用同步/阻止API。
    • 如果您的应用程序受内存限制,并且您希望将其扩展为更多 并发连接/请求,然后,作为一个经验法则,你将是 更好地使用异步API。