异步指一个执行中的任务,拆开成多个子任务各自执行。异步与同步处理相对,同步指多个执行中的子任务,等待所有子任务执行完再继续执行。异步的作用是使有I/O操作的任务最大化利用处理器的计算,以达到缩短任务的完成时间。
异步可以用多进程、多线程或其它技术实现,常见实现技术有:
语言 | 异步技术 | 多异步依赖顺序表达 | 返回值函数表达 | 返回值直接表达 | 处理非阻塞 |
---|---|---|---|---|---|
javascript | setTimeout/setInterval 异步请求 Promise generator async/await web worker |
否 否 是 是 是 否 |
是 是 是 否 否 否 |
否 否 否 是 是 否 |
否 否 否 否 否 是 |
java | Thread Executor |
是 是 |
否 是 |
否 否 |
是 是 |
C# | Thread Task async/await |
是 是 是 |
否 是 否 |
否 否 是 |
是 是 是 |
多异步依赖顺序表达,指后一个异步处理需要前一个异步处理的返回值作为参数,这种多异步依赖有两种表达,一种是嵌套表达,一种是顺序表达。
嵌套表达:
myAsyncMethod1().then(function(result1){
myAsyncMethod2(result1).then(function(result2){
console.log(result2);
})
})
嵌套表达会造成异步嵌套地狱的现象,即形容代码可读性很混乱。
顺序表达:
var result1 = await myAsyncMethod1();
var result2 = await myAsyncMethod2(result1);
console.log(result2);
返回值函数表达,指返回值通过函数的参数返回,如:
myAsyncMethod1().then(function(result1){
console.log(result1);
})
返回值直接表达,指返回值通过赋值表达式直接表达,如:
var result1 = await myAsyncMethod1();
console.log(result1);
处理非阻塞,指处理过程中,是否会占用处理,而无法处理其它任务。阻塞表现在假如异步中有死循环或计算量需要很长时间,软件应用的显示画面卡住无法展示新的内容以及无法操作。
来源:CSDN
作者:静望远方
链接:https://blog.csdn.net/luckeast/article/details/104532519