JavaScript中事件循环总结
这篇文章主要讲解了“JavaScript中事件循环总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中事件循环总结”吧!
创新互联是一家专业从事网站建设、成都网站制作的网络公司。作为专业的建站公司,创新互联依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、成都营销网站建设及网站设计开发服务!
js中的事件循环
因为JavaScript是单线程的,同一事件只能执行一种方法,所以会将程序中的方法加入到执行栈中按照后进先出的顺序依次执行,当遇见异步任务时不会被阻塞,而是将任务放入事件队列中,继续执行执行栈中的同步代码,等当前执行栈中的所有任务都执行完毕则查找事件队列中的任务,并把任务的回调函数放入执行栈中,执行其中的同步代码,如此反复形成的循环被称为事件循环。
node.js
node.js特点
事件驱动
从上向下执行代码,当遇到需要回调的地方就加入到事件队列中,主线程运行完就去执行事件队列中的回调。整个过程不会阻塞新的事件,也不需要维护已经建立的事件
非阻塞io
主线程空闲时,就开始循环事件队列,处理事件队列中的事件,如果该事件不是io任务就亲自处理,如果是io任务,则交给线程池处理并指定回调函数,然后继续循环队列中的其他事件,当阻塞操作完成后会将结果和回调函数放入队列中,主线程循环到时就执行该回调函数。
node.js优缺点
优点
高并发:node.js用一个主线程处理所有的请求,然后对io操作进行异步处理,避开了创建、销毁线程以及在线程之间切换所需的开销和复杂性
适合io密集型应用
缺点:
不适合CPU密集型应用:长时间的计算会导致cpu时间片不能释放,使得后续io事件无法发起
不能充分利用多核cpu
可靠性低,一旦代码某个环节崩溃,整个系统都会崩溃
适用场景:
restful api:请求和响应只需少量的文本,不需要大量的逻辑处理。可以处理数万条连接,只需请求api组织数据并返回即可
大量Ajax请求的场景中
聊天服务:轻量级,高流量,没有复杂的计算逻辑
node.js的事件循环
node事件循环依靠libuv引擎,v8解释js代码后调用对应的node api,这些api由libuv引擎驱动执行对应任务,并把不同的事件放入不同的队列中等待主线程执行,因此node的事件循环存在于libuv引擎中。
libuv引擎:实现了事件循环、文件操作等,是node.js实现异步的核心
node.js的单线程仅仅指JavaScript运行在单线程中,内部可以通过线程池完成io操作
poll(查询阶段)---》check(检查阶段)---》close callback(关闭事件回调阶段)---》timer(定时器检测阶段)---》io回调阶段---》闲置阶段---》轮询阶段
poll阶段(轮询阶段):
v8将js代码解析后传入libuv引擎中,循环首先进入poll阶段。先查看poll队列是否有事件,有就按先进先出顺序执行回调。
感谢各位的阅读,以上就是“JavaScript中事件循环总结”的内容了,经过本文的学习后,相信大家对JavaScript中事件循环总结这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!
当前名称:JavaScript中事件循环总结
转载源于:http://scjbc.cn/article/jpjpej.html