javascript - Node并发访问时与猜想的结果不致
问题描述
试验的逻辑比较简单, 就是Node访问数据库查询数据, SQL语句的执行时间在2秒左右, 我用JMeter进行多线程测试(5线程),按照预想的结果(根据Node非堵塞特性), 应该是5线程同时在2秒返回结果, 但是结果是这样的:


按照结果来看, Node成串行执行了, 这和预想的结果完成不一致啊, 哪位能解释一下
代码:
app.get(’/’, function (req, res) { var now = +(new Date()) connection.query(’select count(*) from ACTIVITY group by name’, function (err, result, fields) {var curr = +(new Date())var tmp = ’耗时:’ + (curr - now)console.log(tmp)res.send(tmp) })})
注: 不是数据库处理的问题, 因为我用两台不同的机器, 执行相同的SQL语句, 时间都2秒
以下为补充
按照@边城的原因是多条SQL语句用的同一个connection, 现在代码已修改, 使用的是数据库连接池, 执行结果如下图:

代码如下:
app.get(’/’, function (req, res) { var now = +(new Date()) pool.getConnection(function (err, conn) {console.log(’--连接池连接成功!’ + +(new Date()))conn.query(’select count(*) from ACTIVITY group by name’, function (err, result, fields) { var curr = +(new Date()) var tmp = ’耗时:’ + (curr - now) console.log(tmp) res.send(tmp)}) })})
这样的结果和预想就比较一致了, 5线程同时查询, 都是在4s+时间返回, 压力上去了, 查询时间自然会长, 经测试, 当线程改成2时, 返回的时间在2s+, 和预期也一致!
问题解答
回答1:时间起始是 query 之前,结束是 query 完成,所以每个时间是 query 运行的时间,
Node 是异步了,但是你用的是同一个 connection,connection 本身是不是需要排队呢?据我所知,多数数据库在同一个 connection 中执行的 SQL 都是排队挨个进行的……多个 connection 之间可能会并行。
相关文章:
1. Java中main方法里面的参数一定要是String []args吗?2. css - 如何讓圖片像雲一樣的行為?3. html5 - 目前 公司App 嵌入H5页面 做个 手机支付功能 没有做过 所以 请求各位有经验的 给个思路4. font-family - 我引入CSS3自定义字体没有效果?5. javascript - js 多维数组的问题6. javascript - node.js中stat() access() open() readFile()都能判断文件是否存在?7. css3 - CSS优先级问题8. html - 关于CSS实现border的0.5px设置?9. mysql - sql 左连接结果union右连接结果,导致重复性计算怎么解决?10. html5 - canvas中的mousedrag事件,为什么鼠标拖出canvas,然后再次移入canvas,drag事件还触发
![Java中main方法里面的参数一定要是String []args吗?](http://www.haobala.com/attached/image/13.jpg)
网公网安备