JS事件循环详解
2017-08-07 21:45
267 查看
本文讲什么?
伴随着JavaScript这种web浏览器脚本语言的普及,对它的事件驱动交互模型,以及它与Ruby、Python和Java中常见的请求-响应模型的区别有一个基本了解,对您是有益的。在这篇文章中,我将解释一些JavaScript并发模型的核心概念,包括其事件循环和消息队列,希望能够提升你对一种语言的理解,这种语言你可能已经在使用但也许并不完全理解。这篇文章是写给谁的?
这篇文章是针对在客户端或服务器端使用或计划使用JavaScript的web开发人员的。如果你已经精通事件循环,那么这篇文章的大部分对你来说会很熟悉。对于那些还不是很精通的人,我希望能给你提供一个基本的了解,这样可以更好地帮助你阅读和编写日常代码。非阻塞I / O
在JavaScript中,几乎所有的I/O都是非阻塞的。这包括HTTP请求,数据库操作和磁盘读写,单线程执行要求在运行期执行一个操作时,提供一个回调函数,然后继续做其它的事情。当操作已经完成时,消息和已提供的回调函数一起插入到队列。在将来的某个时候,消息从队列移除,回调函数触发。虽然这种交互模型可能对已经习惯使用用户界面的开发人员很熟悉,比如“mousedown,”和“click”事件在某一时刻被触发。这与通常在服务器端应用程序进行的同步式请求-响应模型是不同的。
让我们来比较一下两小块代码,发出HTTP请求到www.google.com和输出响应到控制台。首先看看Ruby,配合使用Faraday(一个Ruby 的HTTP 客户端开发库):
response = Faraday.get 'http://www.google.com' puts response puts 'Done!'
执行路径很容易跟踪:
执行get方法,执行的线程等待,直到收到响应
从谷歌收到响应并返回给调用者,它存储在一个变量中
变量的值(在本例中,就是我们的响应)输出到控制台
值“Done!“输出到控制台
相关文章推荐
- js运行机制—事件循环(Event Loop)详解
- Node.js事件循环(Event Loop)和线程池详解
- Node.js事件循环(Event Loop)和线程池详解
- Node.js事件循环(Event Loop)和线程池详解
- event loop js事件循环 microtask macrotask
- js中的事件委托或是事件代理详解
- JS循环网页元素,手动触发事件
- js事件循环
- Js冒泡事件详解及阻止
- js事件监听器用法实例详解
- js事件监听器用法实例详解
- JS 单线程和事件循环
- [js点滴知识(转)]事件冒泡详解
- [js点滴]JavaScript事件详解
- event loop js事件循环 microtask macrotask
- node.js中的事件处理机制详解
- js添加标签以及事件和jQuery常用标签详解
- 深入浅析Node.js 事件循环
- Node.js Event-loop事件循环
- js的事件流和事件处理详解