NODEJS+MONGODB+AngularJS的学习之路第二章
1.比较线程和时间回调
2.node中的柱塞
柱塞I/O停止当前线程的执行并等待一个回应, 直到收到回应道才能继续
3使用超时器来延迟工作
settTimeout(fun, time)
清楚定时器clearTimeout()
使用时间间隔执行定期工作
setInterval(fun, time)
清除定时器clearInterval()
从时间循环中取消定时器引用
例如: myinterval = setInterval(myfun)
myinterval.unref();
重新引用 myinterval.redf();
4使用nextTick来调度工作
在时间队列上调度工作的一个非常有用的方法是使用precess.nextTick(callback)函数。此函数调度要在事件循环的下一次循环中运行的工作。 不像setImmediate()方法。nextTick()在I/O时间被触发之前执行,这可能会导致i/o时间的饥饿, 所以node通过默认值为1000的process.maxTickDepth来限制时间队列的每次循环可执行的nextTick()事件数目。
下面清单中的代码说明了使用阻塞i/o调用, 定时器和nextTick()时, 事件的顺序。请注意。阻塞调用fs.stat()首先执行, 然后是两个setImmediate()调用, 之后是两个nextTick()调用, 下面显示两个nextTick()调用在任何其他的调用之前执行, 之后是第一个setImmdiate()调用, 接着是FS.stat()调用, 然后在循环的下一次迭代中, 第二个setImmediate()被调用。
5.实现时间发射器和监听器
1实现一个简单的事件发射器
var events = require('events');
var emitter = new events.EventEmitter();
emitter.emit('simpleEvent');
直接添加到JavaScript对象, 在对象实例中调用 events.EventEmitter.call(this) 还需要把events.EventEmitter.prototype添加到对象的原型中
2.把时间监听器添加到对象
.addListener(eventName, callback) 加入到事件队列
.on(eventName, call back) 加入到事件队列
once(eventName, callback) 触发一次
添加一个监听
3.从对象中删除监听器