用户定义的回调函数是否在node.js中使用线程池?

时间:2014-11-29 17:12:37

标签: node.js

这个问题是要了解事件循环如何调用线程池来处理任务。 说, 我想创建一个函数(比如处理小任务)而不是任何i / o操作,我想要使用回调函数进行处理,这样它就可以调用线程池,任务可以与我的主线程并发,并返回结果在完成后的回调中。我知道可以通过创建子进程(分叉等)来完成, 但是,我有点困惑,并且想要了解在i / o操作中单个线程节点中的进程是如何并发执行的,而不是在用户定义的操作中。在事件循环中究竟发生了什么,将所有事件传递给线程池还是如何识别它是否是I / O操作?

我是node.js的新手并且完全糊涂了。 帮助将不胜感激:))

2 个答案:

答案 0 :(得分:0)

  

“Node.js管理自己的I / O线程”,使用libuv进行涉及网络,文件系统等的操作.libuv实际上为I / O创建了一个基于平台大小不同的线程池。 V8事件循环是一个单独的线程,用于处理队列中的事件。这些事件映射到JavaScript函数以使用事件数据执行。这就是Node.js处理异步I / O的方式。

来源: http://www.wintellect.com/blogs/dbanister/stop-fighting-node.js-in-the-enterprise

因此每个I / O操作都在V8事件循环线程之外执行,这就是它同时运行的原因。

I / O操作高效运行,因为正如您所提到的,使用了一个线程池 - 一组线程,它们等待来自V8事件循环的传入任务,执行它们,并将数据返回给JavaScript回调函数。

答案 1 :(得分:-1)

正如您所说,Node运行时是单线程的。 Node非常适合IO绑定操作。它不太适合CPU绑定,因为它会阻塞Node的事件循环。