深入浅出 Node.js - 利用事件队列解决雪崩问题
发布于 2 天前 作者 IvanYoung-GitHub 165 次浏览 来自 问答
var proxy = new events.EventEmitter();
var status = "ready";
var select = function (callback) {
  proxy.once("selected", callback);
  if (status === "ready") {							 	
    status = "pending";								 	
    db.select("SQL", function (results) {		
      proxy.emit("selected", results);			
      status = "ready";									
    });															
  }  
};

(上面是书中源代码) 问题:假设第一次调用select(callback){}中的db.select(“SQL”, function(results)…)函数在后台子线程(底层)要执行一个小时才返回结果,那在此期间,第二次调用select(callback)的时候,也就进不了if (status === “ready”){}这段代码了,也就缺少了“selected”事件的emit,会导致listener内存泄漏吧?

书上只简单说明Node单线程执行,无需担心状态同步问题,这个好像说不过去啊。(异步I/O操作实际在底层还是以子线程形式执行的啊)

1 回复

疑问:就是假定db.select()耗时1个小时,在这1小时内所有的select()调用里的(status === “pending”),即1小时内的所有select()调用均无法执行完整。 (求教,在线等…这个理解哪出问题了…)

回到顶部