
【异步编程】
文章平均质量分 96
异步编程在现代计算机编程中具有重要的意义,它对于提高应用程序的性能、响应性和资源利用率非常关键。异步编程提高了应用程序的效率、性能和用户体验,同时充分利用了多核处理器和多线程技术,使程序更适应现代计算环境的需求。异步编程在许多领域都有广泛的应用,包括网络编程、大数据处理、分布式系统、Web 开发等等
小小工匠
show me the code ,change the world
展开
-
异步编程 - 14 异步、分布式、基于消息驱动的框架 Akka
Akka 是一个开源的并发、分布式、基于消息驱动的框架,用于构建高可伸缩性、可靠性和并发性强的应用程序。它是基于 JVM(Java虚拟机)的,主要使用 Scala 编程语言开发,但也提供了 Java API,因此可以在 Java 和 Scala 中使用。Actor 模型:Akka 的核心构建块是 Actor,它是一种轻量级并发原语。Actor 之间通过消息通信进行互动,每个 Actor 都有自己的状态和行为,它们之间是相互隔离的,这有助于构建高度可伸缩的系统。并发性和并行性。原创 2023-09-16 23:46:53 · 10650 阅读 · 0 评论 -
异步编程 - 13 高性能线程间消息传递库 Disruptor
Disruptor是一个高性能的线程间消息传递库,它源于LMAX对并发性、性能和非阻塞算法的研究,如今构成了其Exchange基础架构的核心部分。要理解Disruptor是什么,最好的方法是将它与目前你已经很好地理解且与之非常相似的东西进行比较,例如与Java的BlockingQueue进行对比。与队列一样,Disruptor的目的也是在同一进程内的线程之间传递数据(例如消息或事件);原创 2023-09-08 22:30:00 · 10575 阅读 · 0 评论 -
异步编程 - 12 异步、基于事件驱动的网络编程框架 Netty
Netty是一个异步、基于事件驱动的网络应用程序框架,其对Java NIO进行了封装,大大简化了TCP或者UDP服务器的网络编程开发。Netty框架将网络编程逻辑与业务逻辑处理分离开来,其内部会自动处理好网络与异步处理逻辑,让我们专心写自己的业务处理逻辑。同时,Netty的异步非阻塞能力与CompletableFuture结合可以让我们轻松实现网络请求的异步调用。原创 2023-09-08 20:30:00 · 10487 阅读 · 0 评论 -
异步编程 - 11 Spring WebFlux的异步非阻塞处理
我们这里主要探讨Spring框架5.0中引入的新的WebFlux技术栈,并介绍其存在的价值与意义、并发模型与适用场景、如何基于WebFlux实现异步编程,以及其内部的实现原理。Spring框架中包含的原始Web框架Spring Web MVC是专为Servlet API和Servlet容器构建的。原创 2023-09-08 18:45:00 · 11621 阅读 · 0 评论 -
异步编程 - 10 Web Servlet的异步非阻塞处理
Servlet是一个基于Java技术的Web组件,由容器管理,生成动态内容。像其他基于Java技术的组件一样,Servlet是与平台无关的Java类格式,它们被编译为与具体平台无关的字节码,可以被基于Java技术的Web Server动态加载并运行。容器(有时称为Servlet引擎)是Web服务器为支持Servlet功能扩展的部分。客户端通过Servlet容器实现请求/应答模型与Servlet交互。原创 2023-09-08 07:00:00 · 10423 阅读 · 0 评论 -
异步编程 - 09 Spring框架中的异步执行_@Async注解异步执行原理&源码解析
在Spring中调用线程将在调用含有@Async注释的方法时立即返回,Spring是如何做到的呢?其实是其对标注@Async注解的类做了代理,比如下面的类Async-AnnotationExample。@Async// 1.创建future// 2.模拟任务执行try {// 3.返回结果。原创 2023-09-08 07:15:00 · 10448 阅读 · 0 评论 -
异步编程 - 08 Spring框架中的异步执行_TaskExecutor接口和@Async应用篇
在Spring Framework中分别使用TaskExecutor和TaskScheduler接口提供异步执行和任务调度的抽象。这里我们着重了解基于TaskExecutor支撑的注解@Async是如何实现异步处理的。@Async 底层原理:就是通过线程池创建一个线程,然后去执行业务逻辑。@Async 注解会应用默认线程池 SimpleAsyncTaskExecutor这种TaskExecutor接口的实现不会复用线程,对应每个请求会新创建一个对应的线程来执行。原创 2023-09-07 21:30:00 · 11700 阅读 · 0 评论 -
异步编程 - 07 基于JDK中的Future实现异步编程(下)_当Stream遇见CompletableFuture
从上述代码可知,noStream方法是典型的命令式编码,我们用for循环来一个个判断当前person对象中的age字段值是否大于等于10,如果是则把当前对象的name字段放到手动创建的nameList列表中,然后再开启新的for循环逐个遍历nameList中的name字段。另外使用流可以让我们很方便地对数据集进行并行处理。上面的代码就是声明式编程,其可读性很强,代码直接可以说明想要什么(从代码就可以知道我们要过滤出年龄大于等于10岁的人,并且把满足条件的person的name字段收集起来,然后打印)。原创 2023-09-07 20:15:00 · 10168 阅读 · 0 评论 -
异步编程 - 06 基于JDK中的Future实现异步编程(中)_CompletableFuture源码解析
这里代码5如果发现future的result不为null,说明当前future还没开始执行,则代码5.1执行我们传递的runnable方法,然后执行代码5.2将future对象的结果设置为null,这时候其他因调用future的get()方法而被阻塞的线程就会从get()处返回null。如上代码与runAsync的不同点在于,这里的行为方法是Supplier,其get()方法有返回值,且返回值会被设置到future中,然后调用future的get()方法的线程就会获取到该值。原创 2023-09-07 18:30:00 · 10238 阅读 · 0 评论 -
异步编程 - 05 基于JDK中的Future实现异步编程(中)_CompletableFuture
CompletableFuture是一个可以通过编程方式显式地设置计算结果和状态以便让任务结束的Future,并且其可以作为一个CompletionStage(计算阶段),当它的计算完成时可以触发一个函数或者行为;当多个线程企图调用同一个CompletableFuture的complete、cancel方式时只有一个线程会成功。原创 2023-09-07 07:15:00 · 10325 阅读 · 0 评论 -
异步编程 - 04 基于JDK中的Future实现异步编程(上)_Future & FutureTask 源码解析
这里我们主要探讨如何使用JDK中的Future实现异步编程,这包含如何使用FutureTask实现异步编程及其内部实现原理;如何使用CompletableFuture实现异步编程及其内部实现原理,以及CompletableFuture与JDK Stream如何完美结合的。原创 2023-09-06 21:30:00 · 10362 阅读 · 0 评论 -
异步编程 - 03 线程池ThreadPoolExecutor原理剖析&源码详解
成员变量ctl是Integer的原子变量,使用一个变量同时记录线程池状态和线程池中线程个数 [线程池状态(高3位),线程个数(低29位)],假设计算机硬件的Integer类型是32位二进制标示,如下面代码所示,其中高3位用来表示线程池状态,后面29位用来记录线程池线程个数:线程池的主要状态线程池的主要状态列举如下:RUNNING:接收新任务并且处理阻塞队列里的任务。SHUTDOWN:拒绝新任务但是处理阻塞队列里的任务。STOP:拒绝新任务并且抛弃阻塞队列里的任务,同时中断正在处理的任务。TIDY原创 2023-09-06 20:15:00 · 10654 阅读 · 0 评论 -
异步编程 - 02 显式使用线程和线程池实现异步编程
我们主要探讨如何显式地使用线程和线程池实现异步编程,这包含如何显式使用线程实现异步编程以及使用线程编程的缺点,如何显式使用线程池实现异步编程以及线程池实现原理。原创 2023-09-06 08:00:00 · 10357 阅读 · 0 评论 -
异步编程 - 01 漫谈异步编程发展史
如果使用异步编程 ,则可以在调用线程内开启一个异步运行单元来执行任务A,开启异步运行单元后调用线程会马上返回一个Future对象(futureB),然后调用线程本身来执行任务B,等任务B执行完毕后,调用线程可以调用futureB的get()方法获取任务A的执行结果,最后再拼接两者的结果。由于服务B和服务C是并发运行,所以相比同步调用,线程A获取到服务B和服务C结果的时间会缩短很多(同步调用情况下的耗时为服务B和服务C返回结果耗时的和,异步调用情况下耗时为max(服务B耗时,服务C耗时))。原创 2023-09-06 07:45:00 · 10408 阅读 · 0 评论