2013-01-24 93 views
0

我已经阅读了一些nodejs的介绍文章,它看起来像创建webapps的一种有趣的方式。但是,我不确定我是否理解“只有一个线程”和“事件循环”,所以我希望有人能为我澄清。节点js异步函数和线程

可以说我有一个函数“computeBigNumbers(data,callback)”。现在,当发出一个http请求时,我会调用这个函数并为它提供一个回调。 在“computeBigNumbers”函数中,如果我没有专门运行子进程中的代码或启动web worker线程,它会是异步吗?我在想不。正确?

回答

1

在“computeBigNumbers”函数中,如果我没有专门在子进程中运行代码或启动web worker线程,它会是异步吗?

...或者调用另一个异步函数。

但是,是的,node.js中只有一个线程,并且您有责任不要阻止它(通过使耗时的任务显式异步)。

I/O适用于回调,但是如果您有一个CPU繁重的操作,那么您可能需要将它分配给Web工作者或子进程。 Javascript中的强烈循环或同步调用C函数将使整个服务器等待您。

+0

非常感谢:) – Trj

+0

另外,如果我想让我的节点应用程序表现得像传统服务器一样,我可以用每个请求启动一个新的子进程,对吧? – Trj

+0

尽管如此,这会破坏节点的目的。如果I/O很重,单个线程可以处理大量的并发请求。当你为节点编写代码时,你已经付出了所有这些回调的精神成本,那么投资将被浪费。 – Thilo