【问题标题】:Reactive Programming in Java deep understandingJava中的反应式编程深入理解
【发布时间】:2018-11-06 11:40:28
【问题描述】:

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

我没有得到的是:

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

我的问题是:

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

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

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

那么我错过了什么?

【问题讨论】:

    标签: java multithreading callback reactive-programming callable


    【解决方案1】:

    “反应式编程利用回调”

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

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

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

    异步编程的艺术是尽可能避免阻塞操作。尽管如此,如果一个程序执行阻塞操作,那么问题不在于异步编程,而在于程序员的资格或恶劣的环境,例如。缺少异步 JDBC 驱动程序。

    【讨论】:

      最近更新 更多