为了账号安全,请及时绑定邮箱和手机立即绑定

nodejs是如何处理监听的?

nodejs是如何处理监听的?

达令说 2018-08-07 10:08:56
如下面这段常见的代码:var http =require('http'); http.createServer(function(req,res){    //XXXX     mycode here }).listen(3000);假如有很多请求同时到达,那么nodejs的单线程如何处理呢?是不是等前面那个请求处理完再接受下一个请求?看起来应该不是的,如果是这样,如果处理的逻辑复杂,就显得慢了。但如果在中间暂停而跑到前面去执行,不是可能产生数据冲突的问题吗?这类似java的线程安全一样。比如下面:var http =require('http');var myVar=1; http.createServer(function(req,res){     myVar=myVar+1;            //XXXX     mycode here;    var k=myVar;    if(k==myVar){         XXXX;        console.log('ok');     } }).listen(3000);显然如果用刚刚的逻辑,那么有可能不输出OK来。
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

nodejs对请求的处理当然是序列化的。所以它没有线程同步的问题。这样的原理表明,NODEJS不适合处理重CPU资源的工作。
这样的设计即有好处也有坏处,好处当然是处理能力大大提高(因为线程切换也要花很多时间的),另外编程难度也大大下降(我们再也不用考虑线程死锁、同步的问题了)。
坏处就是每个请求处理时间不能太长,否则可能会影响其它请求的处理,比如在请求处理中有如下代码,可能就会阻塞:

for(var i=0;i<100000;i++){
   console.log(rf.readFileSync("test","utf-8")); }

大多费时操作IO操作都需要回调函数处理。而费CPU的操作根本不可行。


查看完整回答
反对 回复 2018-09-22
  • 1 回答
  • 0 关注
  • 923 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信