一:同步与异步
1:同步
Synchronization
。指同一时间只能做一件事,也就是说一件事做完了才能做另一件事。
例:
let ary = [ ]; for(let i = 0;i < 100;i++){ ary[i] = i; } console.log(ary);
1-1:同步优点:
做任何事情都是依次执行,井然有序,不会存在大家同时抢一个资源的问题。
1-2:同步缺点:
由于是依次进行,假如其中一个步骤花的时间较长,那么后续动作就会等待它的完成,从而影响效率。
2:异步
概念:
可以让很多操作同时进行。
什么时候使用异步?
一段代码需要花费时间时,就使用异步。
什么操作比较花费时间?
I/O的操作(文件的读取和写入),网络请求的时候
2-1:异步的实现:
<1>多线程:一个应用程序中的执行任务,每个应用程序至少会有一个线程,它被称为主线程。如果想实现异步处理,就可以通过开启多个线程,这些线程可以同时执行。(属于阻塞式)
<1-1>阻塞式:虽然我们可以通过开启多个线程来同时执行很多任务,但是每个任务中的代码仍然是同步的,当某个任务代码执行时间过长,也只会影响到当前线程的代码,而其他线程的代码不会受到影响。
<2>单线程非阻塞式:相当于只有一个线程,然后把耗时的一些操作分成两部分,先把快速能做的事情做了,这样保证它不会阻塞其他代码的运行。剩下耗时的部分在单独进行。
二:回调函数实现异步
1:JavaScript引擎是以单线程的机制来运行代码的。所以,JavaScript中想要实现异步就只有采用单线程非阻塞式的方式。
例:早期,单线程非阻塞通过回调函数来实现:
console.log("start"); setTimeout(function(){ console.log("timeout"); },5000); console.log("end");
结果:
start end // 等待5秒 timeout
2:回调函数实现异步的缺陷
就是容易产生回调地狱
2-1:产生原因:
例:
setTimeout(function () { console.log("1"); setTimeout(function () { c