1

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

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

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

对于更有经验的协同程序的人来说,这是一个明显的答案,还是有“它取决于”的特定领域?

4

1 回答 1

2

这取决于您正在使用的库的内部细节以及您的性能/可扩展性目标:

  • 如果您的库是内部异步的,那么始终建议通过其本机异步 API 使用它。免责声明:我不知道 Cassandra 的内部结构如何(同步或异步)。
  • 如果您的库是内部同步/阻塞的(大多数遗留库都是),那么它取决于:
    • 如果您的应用程序受 IO 限制(向/从网络/磁盘读取/写入大量字节)并且您正在优化它以提高吞吐量(在大批量负载上最大化字节处理数),那么根据经验,您使用同步/阻塞 API 会更好。
    • 如果您的应用程序受内存限制,并且您希望将其扩展到更多并发连接/请求,那么根据经验,您最好使用异步 API。
于 2017-10-12T07:25:11.500 回答