深入浅出 Node.js - 利用事件队列解决雪崩问题
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操作实际在底层还是以子线程形式执行的啊)