9.8 何时何地使用新技术
本章讲解了如何使用非阻塞式和基于事件驱动的系统。这是否意味着大家明天就要扔掉现有的Java EE或者Spring企业级Web应用呢?答案当然是否定的。
即使不去考虑CompletableFuture和RxJava相对较新,使用它们依然有一定的复杂度。它们用起来比到处显式使用Future和回调简单,但对很多问题来说,传统的阻塞式Web应用开发技术就足够了。如果还能用,就别修理。
当然,我也不是说阅读本章会白白浪费您一个美好的下午。事件驱动和响应式应用正在变得越来越流行,而且经常会是为你的问题建模的最好方式之一。响应式编程宣言(http://www.reactivemanifesto.org/)鼓励大家使用这种方式编写更多应用,如果它适合你的待解问题,那么就应该使用。相比阻塞式设计,有两种情况可能特别适合使用响应式或事件驱动的方式来思考。
第一种情况是业务逻辑本身就使用事件来描述。Twitter就是一个经典例子。Twitter是一种订阅文字流信息的服务,用户彼此之间推送信息。使用事件驱动架构编写应用,能准确地为业务建模。图形化展示股票价格可能是另一个例子,每一次价格的变动都可认为是一个事件。
另一种显然的用例是应用需要同时处理大量I/O操作。阻塞式I/O需要同时使用大量线程,这会导致大量锁之间的竞争和太多的上下文切换。如果想要处理成千上万的连接,非阻塞式I/O通常是更好的选择。
