• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

单线程与异步

开发技术 开发技术 5小时前 1次浏览

单线程与异步

1 单线线程是对多线程的,对于多线程的开发语言,有一个请求就可以开一个线程处理。那,对于单线程语言,只有通过异步调用程序。【事件 (事件循环机制), 回调】

2 异步是对同步说的, 最大区别就是同步需要等待,异步这不需要等待。

会采用异步的三种情况 可以写3个例子分别看看

在定时执行时, 如:setTimeout,setInterval
请求数据和图片、音频、视频资源时,如 ajax 、img 、audio、video … 这些资源都要很长的等待时间
事件,因为事件只是在用户点击的时候才会触发
!!!需要等待 就异步
!!!需要等待 就异步
!!!需要等待 就异步

注意:闭包容易出现内存泄漏,就是内存空间无法被gc回收。

【异步】非阻塞
 (function funyb () {
  	console.log(1);
  	setTimeout(function () {console.log(2)}, 3000);
  	console.log(3);
  })()
  //1
  //3
  //2

注意: setTimeout(fun,ms);
//fun 是一个函数。 比如 function(){console.log(2)}
//fun 不能是一个函数执行。 比如 console.log(2) 这样setTimeout的 ms数就没有用了。而是立即执行

【同步】会阻塞
(function funyb () {
  	console.log(1);
  	alert(2);//这个执行完才会往下。alert 不点击确定就一直不执行console.log(3)
  	console.log(3);
  })()



一:异步是什么?
同步和异步是两种模式。
“同步模式”就是指后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的。
“异步模式”则完全不同,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
通俗的理解异步任务,即就是当轮到某个任务执行时,这个任务可能比较复杂,或者比较耗时间,所以就先不执行这个任务,直接执行下一个任务,等结束后执行这个任务,这个任务结束后会立即执行自己的回调函数。

二:回调函数:callback
A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.
以上解释是Google得出的解释,非常清晰简明,翻译过来就是:回调是一个函数,它作为参数传递给另一个函数,并在其父函数完成后执行。

举下面的例子:

这个是异步请求时的回调

这是点击事件的回调

同步任务的回调

所以回调与同步、异步并没有直接的联系,回调只是一种实现方式,既可以有同步回调,也可以有异步回调,还可以有事件处理回调和延迟函数回调,这些在我们工作中有很多的使用场景
所以其实并不是我们不认识回调函数,而是我们都萦绕在了这个“callback“ 这个词上,当你在一个函数中看到它是就会困惑,其实它只是一个形参名字而已。

三:JS的异步请求和异步加载;
异步请求:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
例子:当用户填写完一条信息后,该信息会自动向服务器提交,然后服务器响应客户端,在此过程中,用户依然在填写表格的信息,即向服务器请求多次,节省了用户的时间,提高了用户的体验。
异步加载:默认的js是同步加载的,(这里的“加载”可以理解成是解析、执行)。异步的JS就是指在加载这条JS代码的同时,继续执行下面的js。
举个例子:比如这段代码

<script type="text/javascript" src='http://china-addthis.googlecode.com/svn/trunk/addthis.js'></script>
<script type="text/javascript" src='http://libs.baidu.com/jquery/2.0.0/jquery.min.js'></script>
<script type="text/javascript">
 console.log('hello world');
</script>

我们的要求似乎很简单,能在页面加载的同时,在控制台输出字符串即可,再讲的通俗一点,就是在请求第一段谷歌提供的js的同时,继续执行下面的js,也就是实现js的异步加载。


程序员灯塔
转载请注明原文链接:单线程与异步
喜欢 (0)