如果同一时间有100个请求,nodejs的顺序是不是先处理第一再处理第二个依次到100
把所有的操作都做成异步,就可以全异步处理。process.nextTick(callback)
再做成异步是不是也得等第一个请求处理完再处理第二个?
@smilexu 不会阻塞,是同时
事件執行的順序是未定義的,不一定處理完第一個纔開始處理第二個,尤其是第一個遇到IO請求時。
@jin52yang 不是单线程的吗?怎么又会同时处理两个请求了? 如果是同时在一个时间内那最多可以处理多少个请求
只说处理完, 那是不是"开始处理"这个事情还是顺序的?
@smilexu 异步并不是并发,是指你不用等待结果的返回,nodejs的单线程用来处理事件(回调啊什么的),具体的操作还是由系统来完成的。
@smilexu http://www.infoq.com/cn/articles/nodejs-asynchronous-io麻烦移步看一下这里
@jin52yang nextTick?你确定吗?他只是指定了事件循环顺序而已。你给出的fileIO,真正的异步处理在c这边。而js这边只是先等待,等成功了用事件触发回来。而基于Js这边的异步用的是child_process。
@rainsilence 并行,不等待
你对比一下这两个实现同样计算的方法,一个会阻塞一个不会。
var fibonacci = exports.fibonacci = function(n) { if (n === 1) return 1; else if (n === 2) return 1; else return fibonacci(n-1) + fibonacci(n-2); } var fibonacciAsync = exports.fibonacciAsync = function(n, done) { if (n === 1 || n === 2) done(1); else { process.nextTick(function() { fibonacciAsync(n-1, function(val1) { process.nextTick(function() { fibonacciAsync(n-2, function(val2) { done(val1+val2); }); }); }); }); } }
并行和单线程是不同概念吧~
异步是启动了其它类似 worker 的东东来并行的
总之记住,在同一个时刻,只有一段你写的代码在执行,所以如果你处理请求的代码有个异步操作,那么可能就去处理第二个了,否则就是一个请求处理完了再处理另一个。
@jin52yang 单线程就是依次处理请求吧 = = 怎么可能同时,直能说在处理的时候不影响事件循环而已。话说提问者问的应该不是依次“接受”请求,而是说依次“处理”请求的问题吧?
不是所有时候都能异步。一堆嵌套看着也别扭。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
把所有的操作都做成异步,就可以全异步处理。process.nextTick(callback)
再做成异步是不是也得等第一个请求处理完再处理第二个?
@smilexu 不会阻塞,是同时
事件執行的順序是未定義的,不一定處理完第一個纔開始處理第二個,尤其是第一個遇到IO請求時。
@jin52yang 不是单线程的吗?怎么又会同时处理两个请求了? 如果是同时在一个时间内那最多可以处理多少个请求
只说处理完, 那是不是"开始处理"这个事情还是顺序的?
@smilexu 异步并不是并发,是指你不用等待结果的返回,nodejs的单线程用来处理事件(回调啊什么的),具体的操作还是由系统来完成的。
@smilexu http://www.infoq.com/cn/articles/nodejs-asynchronous-io麻烦移步看一下这里
@jin52yang nextTick?你确定吗?他只是指定了事件循环顺序而已。你给出的fileIO,真正的异步处理在c这边。而js这边只是先等待,等成功了用事件触发回来。而基于Js这边的异步用的是child_process。
@rainsilence 并行,不等待
你对比一下这两个实现同样计算的方法,一个会阻塞一个不会。
并行和单线程是不同概念吧~
异步是启动了其它类似 worker 的东东来并行的
总之记住,在同一个时刻,只有一段你写的代码在执行,所以如果你处理请求的代码有个异步操作,那么可能就去处理第二个了,否则就是一个请求处理完了再处理另一个。
@jin52yang 单线程就是依次处理请求吧 = = 怎么可能同时,直能说在处理的时候不影响事件循环而已。话说提问者问的应该不是依次“接受”请求,而是说依次“处理”请求的问题吧?
不是所有时候都能异步。一堆嵌套看着也别扭。