@@ -4,33 +4,32 @@ title: Async Method Invocation
44folder : async-method-invocation
55permalink : /patterns/async-method-invocation/
66categories : Concurrency
7+ language : zh
78tags :
89 - Reactive
910---
1011
11- ## 含义
12+ ## 意图
1213
13- 异步方法是一种调用线程在等待任务结果时候不会被阻塞的模式。该模式提供了对多个任务的并行处理,并通过回调或等待,在所有任务完成后在提供结果读取 。
14+ 异步方法调用是一个调用线程在等待任务结果时不会阻塞的模式。模式为多个独立的任务提供并行的处理方式并且通过回调或等到它们全部完成来接收任务结果 。
1415
1516## 解释
1617
17- 真实世界案例
18+ 真实世界例子
1819
19- > 发射太空火箭是一项令人兴奋的事业。在任务指挥部下达发射命令后, 经过一些未确定的时间 ,火箭要么成功发射,要么重演挑战者悲剧 。
20+ > 发射火箭是一项令人激动的事务。任务指挥官发出了发射命令,经过一段不确定的时间后 ,火箭要么成功发射,要么惨遭失败 。
2021
21- 简而言之
22+ 通俗地说
2223
23- > 异步方法调用开始任务处理并,在任务结果准备好之前立即返回。任务处理的结果会在稍后再返回给调用者 。
24+ > 异步方法调用开始任务处理,并在任务完成之前立即返回。 任务处理的结果稍后返回给调用方 。
2425
25- 维基百科的解释
26+ 维基百科说
2627
27- > 在多线程计算机编程中,异步方法调用(AMI),也被称为异步方法调用或异步模式。这是一种设计模式,在这种模式下,调用点在等待被调用代码完成时不会被阻塞。相反,当返回点到达时,调用线程会得到通知。轮询结果是一种不受欢迎的选择 。
28+ > 在多线程计算机编程中,异步方法调用(AMI),也称为异步方法调用或异步模式,是一种设计模式,其中在等待被调用的代码完成时不会阻塞调用站点。 而是在执行结果到达时通知调用线程。轮询调用结果是不希望的选项 。
2829
29- ** 编程示例 **
30+ ** 程序示例 **
3031
31- 在这个例子中,我们正在发射太空火箭和部署月球车。
32-
33- 该应用演示了异步方法调用模式。该模式的关键部分是 ` AsyncResult ` ,它是一个异步计算值的中间容器,` AsyncCallback ` 可以在任务完成时提供执行行动作,` AsyncExecutor ` 负责管理异步任务的执行。
32+ 在此示例中,我们正在发射太空火箭并部署月球漫游车。该应用演示了异步方法调用模式。 模式的关键部分是` AsyncResult ` (用于异步评估值的中间容器),` AsyncCallback ` (可以在任务完成时被执行)和` AsyncExecutor ` (用于管理异步任务的执行)。
3433
3534``` java
3635public interface AsyncResult <T> {
@@ -54,7 +53,7 @@ public interface AsyncExecutor {
5453}
5554```
5655
57- ` ThreadAsyncExecutor ` 是 ` AsyncExecutor ` 的一个实现。接下来将着重说明它的一些关键部分 。
56+ ` ThreadAsyncExecutor ` 是 ` AsyncExecutor ` 的实现。 接下来将突出显示其一些关键部分 。
5857
5958``` java
6059public class ThreadAsyncExecutor implements AsyncExecutor {
@@ -91,40 +90,41 @@ public class ThreadAsyncExecutor implements AsyncExecutor {
9190}
9291```
9392
94- 然后我们准备发射一些火箭,看看所有东西是如何一起运作的 。
93+ 然后,我们准备发射一些火箭,看看一切是如何协同工作的 。
9594
9695``` java
9796public static void main(String [] args) throws Exception {
98- // construct a new executor that will run async tasks
97+ // 构造一个将执行异步任务的新执行程序
9998 var executor = new ThreadAsyncExecutor ();
10099
101- // start few async tasks with varying processing times, two last with callback handlers
100+ // 以不同的处理时间开始一些异步任务,最后两个使用回调处理程序
102101 final var asyncResult1 = executor. startProcess(lazyval(10 , 500 ));
103102 final var asyncResult2 = executor. startProcess(lazyval(" test" , 300 ));
104103 final var asyncResult3 = executor. startProcess(lazyval(50L , 700 ));
105104 final var asyncResult4 = executor. startProcess(lazyval(20 , 400 ), callback(" Deploying lunar rover" ));
106105 final var asyncResult5 =
107106 executor. startProcess(lazyval(" callback" , 600 ), callback(" Deploying lunar rover" ));
108107
109- // emulate processing in the current thread while async tasks are running in their own threads
110- Thread . sleep(350 ); // Oh boy, we are working hard here
108+ // 在当前线程中模拟异步任务正在它们自己的线程中执行
109+ Thread . sleep(350 ); // 哦,兄弟,我们在这很辛苦
111110 log(" Mission command is sipping coffee" );
112111
113- // wait for completion of the tasks
112+ // 等待任务完成
114113 final var result1 = executor. endProcess(asyncResult1);
115114 final var result2 = executor. endProcess(asyncResult2);
116115 final var result3 = executor. endProcess(asyncResult3);
117116 asyncResult4. await();
118117 asyncResult5. await();
119118
120119 // log the results of the tasks, callbacks log immediately when complete
120+ // 记录任务结果的日志, 回调的日志会在回调完成时立刻记录
121121 log(" Space rocket <" + result1 + " > launch complete" );
122122 log(" Space rocket <" + result2 + " > launch complete" );
123123 log(" Space rocket <" + result3 + " > launch complete" );
124124}
125125```
126126
127- 以下是控制台输出 。
127+ 这是程序控制台的输出 。
128128
129129``` java
13013021 : 47 : 08. 227 [executor- 2 ] INFO com.iluwatar.async.method.invocation. App - Space rocket < test> launched successfully
@@ -140,22 +140,21 @@ public static void main(String[] args) throws Exception {
14014021 : 47 : 08. 618 [main] INFO com.iluwatar.async.method.invocation. App - Space rocket < 50 > launch complete
141141```
142142
143- ## 类图
143+ # 类图
144144
145- ![ alt text] ( ../../async-method-invocation/etc/async-method-invocation.png " Async Method Invocation ")
145+ ![ alt text] ( ../../../ async-method-invocation/etc/async-method-invocation.png " Async Method Invocation ")
146146
147- ## 适用场景
147+ ## 适用性
148148
149- 在以下场景可以使用异步调用模式
149+ 在以下情况下使用异步方法调用模式
150150
151- * 你有多有可以并行执行的独立任务
152- * 你需要提高一组串行任务的性能
153- * 你的处理能力有限、或者有长期运行的任务,调用者不应该等待任务所有任务运行结束
151+ * 您有多个可以并行运行的独立任务
152+ * 您需要提高一组顺序任务的性能
153+ * 您的处理能力或长时间运行的任务数量有限,并且调用方不应等待任务执行完毕
154154
155- ## 现实示例
155+ ## 真实世界例子
156156
157157* [ FutureTask] ( http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/FutureTask.html )
158158* [ CompletableFuture] ( https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html )
159159* [ ExecutorService] ( http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html )
160160* [ Task-based Asynchronous Pattern] ( https://msdn.microsoft.com/en-us/library/hh873175.aspx )
161-
0 commit comments