java - 深入理解Java中的Reactive Programming

标签 java multithreading callback reactive-programming callable

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

我没有得到的是:

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

我的问题是:

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

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

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

那我错过了什么?

最佳答案

“响应式编程使用回调”

不完全是。它是使用回调的异步编程,而响应式编程是异步编程的特例。实际上,您的问题一般涉及异步编程,并不涉及响应式(Reactive)编程的特殊性。

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

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

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

关于java - 深入理解Java中的Reactive Programming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53171177/

相关文章:

java - 在 Java 中将常规日期转换为儒略日期,反之亦然

java - 短语 "class object"在线程同步上下文中指的是什么?

java - 如何在运行选择查询时使用 java 并发

java - 如何计算多个线程完成执行的总时间?

javascript - 无法通过子函数调用从数据库检索 Nodejs MySQl 数据

c++ - 将 C++ 与 Tizen 库一起使用

java - 谷歌眼镜语音识别

java - 在CRUD中执行C的方法中,它应该返回什么?

java - 安卓初学者 : ListView with Images and CheckBoxes

ruby-on-rails - MultiJson::DecodeError {"email"处的意外标记 :"foo@bar.com"}