Bry*_*eld 139 multithreading node.js
如果我理解正确Node JS是非阻塞的...所以不是等待来自数据库或其他进程的响应,而是转移到其他东西并稍后检查.
它也是单线程的.
所有这些都意味着给定的Node JS进程可以完全有效地利用单个CPU核心,但它不会使用机器上的任何其他核心,因为它一次不会使用多个核心.
这当然意味着其他CPU仍然可以被其他进程用于SQL数据库或其他有意分离的CPU重子程序,只要它们是一个单独的进程即可.
此外,如果Node JS进程具有无限循环或长时间运行的函数,则在无限循环或长时间运行的函数停止(或整个进程被终止)之前,该进程不再有用.
这一切都好吗?我的理解是正确的吗?
jco*_*der 86
非常正确,是的.node.js服务器有一个内部线程池,因此它可以执行阻塞操作,并在完成任务时通过回调或事件通知主线程.
所以我想它会限制使用另一个核心用于线程池,例如,如果你做一个非阻塞文件系统读取,这可能是通过告诉线程池中的线程执行读取并设置回调来实现的.它已完成,这意味着当主node.js程序正在执行其他操作时,读取可能发生在不同的线程/核心上.
但是从node.js的角度来看,它完全是单线程的,不会直接使用多个核心.
inf*_*net 26
即使这是一个旧线程,我想,我会分享一个想法,如何在Node.JS应用程序中使用更多的那个核心.正如Nuray Altin所说 - JXcore可以做到这一点.
简单的例子:
var method = function () {
console.log("this is message from thread no", process.threadId);
};
jxcore.tasks.runOnThread(0, method);
jxcore.tasks.runOnThread(1, method);
// this is message from thread no 1
// this is message from thread no 0
Run Code Online (Sandbox Code Playgroud)
默认情况下有两个线程(您可以更改它jxcore.tasks.setThreadCount())
当然,你可以做更多的任务.文档在这里.
关于该主题的文章很少:
Nur*_*tin 13
因为这个问题差不多在2年前提出过.事情变得不同或者Node.JS上存在多线程问题的替代方法
根据以下博客文章,使用传入的"任务"扩展,一些可以直接从其他可用核心受益.
http://oguzbastemur.blogspot.com/2013/12/multithread-nodejs.html
| 归档时间: |
|
| 查看次数: |
64944 次 |
| 最近记录: |