欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

异步和单线程

程序员文章站 2024-01-29 10:29:10
...

1.首先我们来说一下什么是异步

举例:

console.log(1);
setTimeout(function(){
console.log(2);
},1000)
console.log(3);

你会发现,程序不是按部就班的先输出1,再输出2,最后输出3,而是先1再3最后2,这就是异步,程序各执行各的不会出现阻塞;对比同步应该更好理解

举例:

console.log(1);
alert(2);
console.log(3);

从这个例子可以看出只有在点击了弹出框的alert确认之后才会执行输出3,会出现程序阻塞。这也是同步和异步的区别,异步不会导致程序的阻塞,同步会导致程序的阻塞。

2、说一下我们什么时候需要异步,也就是我们程序什么时候不能阻塞。

在可能发生等待的情况下,就像上边提到的等待过程中,不能像alert一样阻塞其他程序的运行。

这就引出了什么情况下会发生等待呢?列出以下几点

a.定时任务,setTimeout,setInterval;

b.网络请求,ajax请求、动态img加载;

c.事件绑定。

3、我们来说一下什么是单线程

相信接触js的小伙伴都知道js是单线程的,所以需要异步,但是什么是单线程,有很多新入行的小伙伴可能不太清楚,还是先上例子

	console.log(1);
	setTimeout(function(){
		console.log(2)
	});
	console.log(3)
这里我们的执行顺序依然是1,3,2,即使定时是没有时间的因为他是异步所以会被先放到一遍,当其他函数执行完毕后,js会查看有没有异步的函数没有执行,然后依次执行,大家可以看出来,单线程就是只能一次干一件事情,不能同时干多件事情,只能一个一个来,就是将程序串起来,但是因为程序不能阻塞所以会先将异步放一边,当程序执行完毕后,再来查看异步是否能马上执行,或者延时执行,再依次执行。