对Node.js的异步机制的思考

Node.js的异步机制是其最大的特色,异步可以应对高并发,具有很好的性能。

但是如果在某个方法里,涉及到数据库的多层查询,异步机制反而成为阻碍。当执行完第一层SQL后,根据所得的结果集(rows)进行结果集进行遍历时,每次遍历的结果作为where条件再执行下一层SQL时,下一层及以后的SQL并不会执行,而是在结果集(rows)遍历到最后时,才执行下一层SQL。

这时,若SQL只有两三层,其实倒还好,可以合并SQL;但是SQL层数多了之后,这种异步机制却是最大的阻碍。
这时,就需要用到Node.js的同步模块(async)。具体如何进行操作,Node.js的官方API有详细说明。我在这就不一一叙述了。

时间: 2024-10-06 22:10:29

对Node.js的异步机制的思考的相关文章

【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制

转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93%E4%B8%8ENode-js%E7%9A%84%E5%BC%82%E6%AD%A5IO%E6%9C%BA%E5%88%B6/ 译者:xidui原文: http://sahandsaba.com/understanding-asyncio-node-js-python-3-4.html 译者前言 如

由Node.js事件驱动模型引发的思考

引言 近段时间听说了Node.js,很多文章表述这个事件驱动模型多么多么优秀,应用在服务器开发中有很大的优势,本身对此十分感性去,决定深入了解一下,由此也引发了一些对程序设计的思考,记录下来. 什么是Node.js Node.js在官网上是这样定义的:"一个搭建在Chrome JavaScript运行时上的平台,用于构建高速.可伸缩的网络程序.Node.js采用的事件驱动.非阻塞I/O模型使它既轻量又高效,是构建运行在分布式设备上的数据密集型实时程序的完美选择." Node.js的事件

node.js的异步I/O、事件驱动、单线程

nodejs的特点总共有以下几点 异步I/O(非阻塞I/O) 事件驱动 单线程 擅长I/O密集型,不擅长CPU密集型 高并发 下面是一道很经典的面试题,描述了node的整体运行机制,相信很多人都碰到了.这道题背后的原理就是nodejs代码执行顺序 setTimeout(function() { console.log('4'); },0) setImmediate(function() { console.log('5'); }) let s = new Promise(function(res

Node.js的异步I/O

Linux操作系统的I/O模型 JAVA的NIO引入了异步I/O,而Node.js宣称的就是异步编程,I/O自然是异步的.其实操作系统在很早就引入了异步I/O的概念,如下图(摘自Unix网络编程中的图片): 我对上图的理解有几点: 从IO设备读取数据到用户内存的整个过程都是由系统内核来完成: 数据总是先被拷贝到内核缓冲区,再由内核缓冲区拷贝到用户内存: 除了异步I/O,其余4种I/O模型其实都是阻塞的,至少在数据从内核拷贝到用户内存时是阻塞的: 虽然异步I/O看上去是理想解决方案,但实现上现在用

Node.js的事件处理机制

1. 为什么Node.js是单线程执行的 因为从JavaScript设计之初,JavaScript是用户与浏览器交互的,主要处理DOM: 这样决定了JavaScript是单线程执行,否则会出现问题:例如:JavaScript的两个线程同时处理同一个DOM元素,则会出现意想不到的错误: 所以Node.js依然是单线程执行:但是不代表Node.js是单线程的,实际上Node.js是多线程的,只是单线程执行而已 2. 非阻塞与任务队列机制 在实际情况下,用户的输入输出是很快速的,但是IO操作确很慢,不

Node.js之模块机制

文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 其实在JavaScript的发展中,它主要是在浏览器前端中被应用广泛.因为在实际应用中, JavaScript的表现能力主要取决于宿主环境的API支持程度, 在最早期,只有对BOM, DOM的支持,随着HTML5的出现,在浏览器中出现了更多,更强大的API供JavaScript调用,但是这些都是发生在前端,后端JavaScript的规范却远远落后.Java有class文件,Phthon有import机制,P

node.js之内存机制特性

Node.JS的V8引擎具有垃圾回收机制与内存限制的特性,V8的内存限制:64位系统约为1.4GB.32位系统约为0.7GB:V8采用基于分代式垃圾回收机制,堆内存结构分为新生代和老生代,新生代达到一定的条件就可以晋升为老生代.如下图所示: 图一  Node.JS堆内存结构 Node.JS能够高效利用内存,它在JavaScript中作用域分为:函数作用域.with作用域.全局作用域.标示符查找会先从当前作用域,若没有找到将会向上级的作用域里查找.查看进程内存使用情况:process.memory

node.js 多异步之间的协作方案

<深入浅出node.js> P77 学习 ///用于处理多个事件对应一个侦听器的情况var count = 0; var results = {}; var done = function (key, value){ results[key] = value; count++; if (count === 3){ ///渲染页面 render(results); } }; fs.readFile(template_path, "utf8", function(err, te

Node.js的模块机制

模块加载过程: 路径分析 -> 文件定位 -> 模块编译 Node对引入过的模块都会进行缓存,以减少二次引入时的开销.缓存的是编译和执行之后的对象.require时对缓存中的模块是第一优先级的 路径分析 模块标识符:require的参数,按书写形式可以分成以下几类: 核心模块:如http,fs,path 文件模块 路径模块 相对路径模块:.或..开始 绝对路径模块:/开始 非路径形式的模块 核心模块 在Node.js源代码编译过程中就已经编译成二进制代码,加载速度超快: 优先级仅次于缓存,因此