成都网站建设设计

将想法与焦点和您一起共享

同步异步,阻塞非阻塞-创新互联

众所周知JavaScript的执行环境是单线程的,当有多任务时,先执行前面的任务再按顺序狮子那个后面一个,如果前面一个任务耗时很长,那么多所有任务都将拖延,比如经常遇到的浏览器无响应其实就是因为某一段JavaScript代码长时间运行(死循环),导致其他任务无法执行,整个页面无法继续加载造成的,这就是阻塞

创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于做网站、网站建设、项城网络推广、重庆小程序开发公司、项城网络营销、项城企业策划、项城品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联建站为所有大学生创业者提供项城建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

为了解决单线程阻塞问题,就出现一种异步编程,典型的异步编程就例如: Node.Js 

同步和异步实际上关注的是消息通信机制

  • 所谓同步,就是发出一个调用时,没有得到结果就不返回

  • 所谓异步,就是发布一个调用后,立刻返回,被调用者通过状态通知来告诉调用者,或者通过回调函数处理

阻塞与非阻塞实际上关注的是程序在等待调用结果时的状态,可能是消息,可能是返回值

  • 所谓阻塞,就是指调用结果返回前,当前线程会被挂起,调用线程只有在得到结果之后才会返回

  • 所谓非阻塞,是指在不能立刻得到结果前,该调用不会阻塞当前线程

这时候,或许对同步异步,阻塞非阻塞有了一个概念,那如果,我们将它们互相组合起来呢?

  • 同步阻塞,老王用烧水壶烧开水,等水开了然后炒菜

  • 同步非阻塞,老王用烧水壶烧开水,然后去炒菜,隔一段时间看一下水烧开了没

  • 异步阻塞,老王买了个烧开了水回响的烧水壶,然后等着水烧开了去炒菜

  • 异步非阻塞,老王用那个会响的烧水壶烧水,然后去炒菜,等水壶响了再去拿水壶

同步阻塞是最原始最笨的办法,他要一直等着水烧开了。同步非阻塞其实是用到了轮询、IO复用、协程等方法,每隔一段时间去看一下是不是烧开了。异步阻塞是个很“叛逆”的问题,一般很少用到,但是还是有这种情况的。异步非阻塞,那就是用到了回调函数和通知方式。

大胆推测,异步最终会变成某种形式或者状态的同步,也就是消息或者回调,消息是进程间的通信,回调本身就是一种同步,只是采取了快响应,慢处理的策略,推后了同步的时间


当前文章:同步异步,阻塞非阻塞-创新互联
本文路径:http://chengdu.cdxwcx.cn/article/degcej.html