异步处理不需要阻塞以等待处理完成,但允许后续操作,直到程序完成处理并回调通知此函数
然后在js中有几种异步方式:
示例1
varasync=function(callback){//readdatasettimeout(function(){callback(“data”)},1000)//1秒后回调}//useasync(function(data){alert(data)}
示例2
varasync=function(callback){varxhr=newxmlhttprequest()xhr打开(“get”,“”,true)xhr.onreadystatechange=函数(){回调(xhr.readystatus文件)}xhr.发送()}异步(函数(数据){警报(数据)})
示例3
与队列模型基本相似。另一个简单的观点是死循环。循环获取队列中的任务。如果没有任务,它将以内核模式休眠。如果有任务,它将获取任务并执行它们。
性能成本:
1。队列锁定成本。如果将其优化为无锁队列,则会得到改进。
2.在某些情况下,如果需要多个队列,开销将加倍。
3.js库开销,主要用于promise实现的相关开销。
4.如果使用async和await,实现开销在理论上只是语法糖,promise和generator在内部使用。因此,涉及到与生成器迭代相关的开销。
常见的异步性能损失可以忽略,这可以视为下一个周期。
比这更好节点.js好多了。
非常简单。循环本身是同步执行的,也就是说,整个循环在几毫秒内完成。js不会等待异步事件结束后继续下一个循环。如果要在循环中执行异步,最好使用递归。首先,创建一个只执行一次的函数。函数包含异步事件。在异步事件的回调函数中再次执行此函数是递归。