对Java的反应式编程有深入的了解

时间:2018-11-06 11:40:28

标签: java multithreading callback reactive-programming callable

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

我没有得到的是:

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

我的问题是:

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

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

唯一的区别是对收益的回调。

那我想念什么?

1 个答案:

答案 0 :(得分:1)

“反应性编程利用回调”

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

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

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

异步编程的技巧是尽可能避免阻塞操作。但是,如果程序执行阻塞操作,则问题不在于异步编程,而在于程序员的资格或恶劣的环境,例如缺少异步JDBC驱动程序。