Kotlin协同程序如何比RxKotlin更好?

我为什么要使用Kotlin协同程序?

RxKotlin库似乎更为复杂。 Kotlin协同程序看起来不那么强大,而且比较麻烦。

我根据安德烈·布雷斯拉夫(JetBrains)的这个设计演讲,在协同工作的基础上: https : //www.youtube.com/watch?v = 4W3ruTWUhpw

幻灯片从谈话是可以访问这里: https : //www.slideshare.net/abreslav/jvmls-2016-coroutines-in-kotlin

Rx有两个部分; 可观察模式,以及一组可操作的操作符,将它们转换并组合起来。 可观察模式本身并不是很多。 那么协程呢? 这只是处理异步的另一个范例。 您可以比较回调函数,Observable函数和协程函数来解决一个给定的问题,但是您不能将范例与全功能的库进行比较。 这就像比较语言和框架。

科特林协同程序如何比RxKotlin更好? 还没有使用协程,但它看起来类似于C#中的异步/等待。 你只需要编写连续的代码,一切都像编写同步代码一样简单,除非它是异步执行的。 这很容易掌握。

我为什么要使用kotlin协同程序? 我会为自己回答。 大多数时候我会坚持使用Rx,因为我喜欢事件驱动的架构。 但是在编写顺序代码时会出现这种情况,我需要在中间调用一个异步方法,我会很乐意利用协程来保持这种方式,避免包装Observable中的所有东西。

Kotlin协程与Rx不同。 由于Kotlin协同程序是一个很薄的语言特征(只有几个基本的概念和一些基本的功能来操作它们),而Rx是一个非常庞大的库,有很多种准备使用的运营商。 两者都是为解决异步编程问题而设计的,但是他们的解决方案却非常不同:

  • Rx带有一种特殊的编程风格,可以在几乎任何编程语言中实现,而无需语言本身的支持。 当手头的问题很容易分解成一系列标准的操作符,而不是那么好的时候,它运行的很好。

  • Kotlin协同程序提供了一种语言功能,可让图书馆编写者实现各种异步编程风格,包括但不限于功能反应式(Rx)。 通过Kotlin协同程序,您还可以在命令式风格,基于承诺/基于期望的风格,以演员风格等方式编写异步代码。

将Rx与基于Kotlin协同程序实现的特定库进行比较是比较合适的。

以kotlinx.coroutines库为例。 这个库提供了一组像async/await和通常被烘焙成其他编程语言的通道。 它也支持轻量级的未来演员。 您可以通过示例阅读kotlinx.coroutines指南中的更多内容。

在某些使用情况下,由kotlinx.coroutines提供的kotlinx.coroutines可以替换或增加Rx。 有一个单独的指南,反应流与协程更深入的相似之处,与Rx的差异。

你链接的谈话/文档不会谈论渠道。 渠道是填补目前对协程和事件驱动编程的理解之间的差距。

使用协程和通道,您可以执行事件驱动的编程,因为您可能已经习惯了使用rx,但是您可以使用同步代码并且不使用“自定义”运算符。

如果你想更好地理解这一点,我建议看看kotlin,那些概念更成熟和精炼(而不是实验)。 查看来自Clojure,Rich Hickey视频,帖子和相关讨论的core.async