node.js , 即通过使用“ynchronous Technologies”every where1, 防止你描述的 st。
任何可能阻碍使用反馈进行进一步处理,而不是阻碍电话。 这避免了完全的停滞不前的增长,并容易重新进入活动场所(即“淹没”基本真实的I/O,要求发送)。
考虑这一代号:
fun() {
string = net.read();
processing(string);
}
read被阻在读物上,只可在读物后免费打,<代码>处理<<>代码>。
现在,如果你们的所有法典都一样:
fun() {
net.read(onDone: processing(read_data));
}
如果你执行<条码>,<>> 类似:
net.read(callback) {
iorequest = { read, callback };
io.push_back(iorequest);
}
fun
is done as soon as read
can queue a read I/O with the associated callback. fun
s stack is rewound without blocking - it returns "immediately" to the event loop without any thread stack leftovers.
I.e. 您可以向下一次呼吁(重新进入事件循环)迈进,而不保留任何关于read线的永久数据。
因此,node.js
,在“用户”守则中出现阻挡电话时,避免使用破碎的警示。
详情请见node.js
, 网址是,最后链接的第一组幻灯。
1well, nearly I guess
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684954.aspx”rel=“nofollow” QueueUserAPC in a comment. 采用这种处理方式,可以阻挡一个被问到的装甲运兵车,在座的下一批装甲运兵车经过了的加工,使其成为“反应”的发送。
Say we have three APCs pending (A
, B
and C
). We get:
初始状态:
Queue ABC
Stack xxxxxxxx
露面睡觉,因此,装甲运兵车的开端,进入A的处理:
Queue BC
Stack AAAAxxxxxxxx
发给B区块相同的:
Queue C
Stack BBBBBBAAAAxxxxxxxx
C区分送:
Queue
Stack CCCCCCCBBBBBBAAAAxxxxxxxx
显而易见的是,如果足够阻挡装甲运兵车,最终将击落。
<代码>node.js,re> 不允许阻断<>。 相反,这里对这三项要求都会发生什么变化:
Queue ABC
Stack xxxxxxxx
启动处理:
Queue BC
Stack AAAAxxxxxxxx
现在,A需要做一些事情——在<代码>node.js中,它实际上can t/em>。 另一项要求(<条码>A)(一般情况下——简明扼要地列出所有变量的斜线):
I/O queue A
Queue BC
Stack AAAAxxxxxxxx
接着,Areturns,并回复到:
I/O queue A
Queue BC
Stack xxxxxxxx
通知:不再有 st脚。 I/O待决地点实际上由本组织管理(使用<条码>epoll或<条码>>。 主要的read子检查了I/O准备就绪的各州和待决的(CPU)点。
然后,B获得一些邮联:
I/O queue A
Queue C
Stack BBBBBBBxxxxxxxx
顺便说一句,B想做的是I/O。 它提出了新的回击和returns。
I/O queue A B
Queue C
Stack xxxxxxxx
如果B's I/O的要求在时间上完成,那么下个缩略语可能会看上去。
I/O queue A
Queue B
Stack CCCCCxxxxxxxx
加工线上没有任何一个以上的阻塞。 促销会没有发出阻挡电话,打字没有显示装甲运兵车的恢复增长类型。