@tensorflow/tfjs-node
我的问题是将 TensorFlow.js 计算(使用)移动到 Node.js 中的工作线程是否是个好主意。这个问题归结为使用原生后端运行 TensorFlow 计算时主线程被阻塞到什么程度的问题。
据我了解,如果我使用完全 JavaScript 版本的 TensorFlow ( @tensorflow/tfjs
) 和 call model.fit(x, y, options)
,适合模型的计算实际上发生在 JavaScript 主线程上。更准确地说,model.fit
返回 a Promise
,因此计算在微任务中异步执行,但这些仍在主线程上运行。这些微任务在某种意义上是阻塞的,例如事件处理程序的执行需要等待微任务队列清空。因此,在这种情况下,将计算转移到 Web Worker 以避免在计算正在进行时阻塞主线程是有意义的。
但是,如果我使用原生版本的 TensorFlow ( @tensorflow/tfjs-node
),“真正的工作”是在原生代码中进行的。这是我不知道的两件事,这使我无法回答标题中的问题:
- 背后的计算是否
model.fit
与主 JS 线程在同一线程上运行? - 不管 1 的答案如何,我们仍然有与
model.fit
. 在微任务队列中发生这种情况是否会阻止其他事件被处理,直到微任务队列为空?
这是我要问的一个示例:假设我有一个发送和接收 socket.io 消息的 Node.js 应用程序。其中一条消息是拟合 TensorFlow.js 模型的请求;当应用程序收到此消息时,它会调用model.fit(x, y, options)
. 假设我没有将 TensorFlow 计算放在工作线程中,那么在计算进行时,应用程序是否还能回复来自服务器的 socket.io ping 消息?