English 中文(简体)
Node.js的仓储方案是否会导致StackOverflow?
原标题:Shouldn t asynchronous programming in Node.js cause a StackOverflow?

我刚刚解决了诺德(正在阅读)的问题:

  1. 服务器开始对一项请求作出回应,该请求一直持续到因I/O而被搁置为止。

  2. 当申请处理器组块时,服务器机基数又回到第1步,处理更多的请求。

  3. 每当I/O申请处理组群时,服务器检查是否完成了任何要求。 它处理国际不动产业联合会的客户,然后继续处理。

Doesn t that mean that there should be a stack overflow at #2, if too many requests start blocking each other and none of them finishes? Why/why not?

最佳回答

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

加工线上没有任何一个以上的阻塞。 促销会没有发出阻挡电话,打字没有显示装甲运兵车的恢复增长类型。

问题回答

Node.js基于谷歌的V8 Java成像发动机,该发动机利用了一个活动Loop。

See See See

在Node.js与校对工作不同的活动场所中,有几个关键方面。

在Node.js,管理时间并不中断你在中间开始履行另一项职能的职能。 相反,从目前的职能,Node.js的一致点将起。

function readAndWriteItem(id) {
  var callback = function(item) {
    item.title = item.title + " " + item.title;
    writeItem(item);
  };
  readItem(id, callback);
};

就此而言,设定了退约,并打电话到<条码>>>。 简言之,readItem将提出质询,并在盘问结果成熟时提出自己的内部警告。 因此,这一榜样功能readAndWriteItem仅仅提出通过电线发送的电文,并增加了一些警示,和立即返回。 一旦这项职能恢复,诺德杰斯人便可以从事活动。

由于职能已恢复,而且由于在你使用Node.js时,整个职能都是如此,因此不存在任何 st。





相关问题
selected text in iframe

How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.

How to fire event handlers on the link using javascript

I would like to click a link in my page using javascript. I would like to Fire event handlers on the link without navigating. How can this be done? This has to work both in firefox and Internet ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Clipboard access using Javascript - sans Flash?

Is there a reliable way to access the client machine s clipboard using Javascript? I continue to run into permissions issues when attempting to do this. How does Google Docs do this? Do they use ...

javascript debugging question

I have a large javascript which I didn t write but I need to use it and I m slowely going trough it trying to figure out what does it do and how, I m using alert to print out what it does but now I ...

Parsing date like twitter

I ve made a little forum and I want parse the date on newest posts like twitter, you know "posted 40 minutes ago ","posted 1 hour ago"... What s the best way ? Thanx.