JavaScript的同步异步

单线程的概念
  • java是一门多线程语言,多线程处理各种各样的事,比如说文件上传,下载等
  • JavaScript是一门单线程的语言,同一个时间只能做一件事,同个时间有多个任务的话,这些任务就需要进行排队,前一个任务执行完,才会执行下一个任务,主要用来实现与用户的交互
  • 如果JavaScript是多线程的话,一个线程在一个DOM节点增加内容,另一个线程要删除这个DOM节点,那么这个DOM节点究竟是要增加内容还是删除?这会带来很复杂的同步问题
JavaScript的同步异步

同步任务:主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务,打开网站时,网站的渲染过程,
比如:元素的渲染,其实就是一个同步任务;

异步任务:不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程,当我们打开网站时,
比如:图片的加载,音乐的加载,其实就是一个异步任务

JavaScript的异步机制

(1)所有同步任务都在主线程上执行,行成一个执行栈
(2)主线程之外,还存在一个任务队列,只要异步任务有了结果,就会在任务队列中放置一个事件
(3)一旦执行栈中的所有同步任务执行完毕,系统就会读取任务队列,看看里面还有哪些事件,那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行
(4)主线程不断的重复上面的第三步

JavaScript的异步编程

书写方式:

1、回调函数
2、Promise
3、ES6 Generator迭代器的异步应用
4、Async/Await的异步应用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章