对Java中的反应式编程有深刻的理解



为了深入了解反应式编程,我试图以一种非常简单的方式重新实现RxJava Observable类。这让我提出了一些关于反应式编程方法的重要问题。我想和你分享。

我没有得到的是:

反应式编程利用回调,然后通过应用程序的工作线程(而不是主线程(来实现繁重的异步操作。这个工作线程等待I/O操作、处理等,当它完成时,它通过回调方法回调调用者。其优点是,主线程不必为了等待处理的响应而被阻塞,因为它是异步的,并且在处理完成时会被调用。

我的问题是:

与简单的多线程相比有什么优势?我的意思是,在多线程中没有回调,所以工作线程不会回调主线程,无论如何它都会将结果返回给调用者(例如使用Callable(。

这两种情况都有一个工作线程被阻塞,以便等待I/O操作或处理

唯一的区别是回调而不是返回

那么我错过了什么?

"反应式编程利用回调">

不完全是。使用回调的是异步编程,而反应式编程是异步编程的一种特殊情况。实际上,您的问题一般涉及异步编程,而不涉及响应式编程的特性。

当线程正在运行时,它在活动状态和阻塞状态之间交替。在这两种状态下,线程都会为其调用堆栈占用大量内存。异步过程应该只使用处于活动状态的线程(和堆栈(,而不阻塞处于阻塞状态的任何线程。这是异步编程的唯一区别和主要优点。

但是,不能阻止异步过程进行阻塞操作,例如阻塞I/O或Semaphore.aqure((。在这种情况下,异步编程变成了多线程编程,失去了它的优势。

异步编程的艺术是尽可能避免阻塞操作。然而,如果一个程序执行阻塞操作,问题不在于异步编程,而在于程序员的资格或糟糕的环境,例如缺乏异步JDBC驱动程序。

最新更新