Nodejs的主进程是单线程的,但它有多线程处理方案(更准备来说是多进程方案),即主进程开启不同的子进程,主进程接收所有请求,然后将分发给其它不同的nodejs子进程处理。
它一般有两种实现:
Nodejs 的 cluster模式 用的就是第一种实现,它使用一个主线程 master 和多个子线程 worker ,形成一个集群,通过主线程来向子线程分发请求。cluster 实现了对 child_process 的封装,通过 fork 方法创建子进程的方式实现了多进程模型。
>
NodeJS的特点:
它是一个Javascript运行环境
依赖于Chrome V8引擎进行代码解释
事件驱动
非阻塞I/O
轻量、可伸缩,适于实时数据交互应用
单进程,单线程
NodeJS的缺点:
1 不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;
解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;
2 只支持单核CPU,不能充分利用CPU
3 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃
原因:单进程,单线程
解决方案:
(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;
(2)开多个进程监听同一个端口,使用cluster模块;
4 开源组件库质量参差不齐,更新快,向下不兼容
5 Debug不方便,错误没有stack trace
NodeJS的应用场景:
实时应用:如在线聊天,实时通知推送等等(如socketio)
分布式应用:通过高效的并行I/O使用已有的数据
工具类应用:海量的工具,小到前端压缩部署(如grunt),大到桌面图形界面应用程序
游戏类应用:游戏领域对实时和并发有很高的要求(如网易的pomelo框架)
NodeJS不适合场景:
CPU使用率较重、IO使用率较轻的应用——如视频编码、人工智能等,Nodejs的优势无法发挥简单Web应用——此类应用的特点是,流量低、物理架构简单,Nodejs无法提供像Ruby的Rails或者Python的Django这样强大的框架
不同的语言、框架都有自己擅长的领域:Electron 基于 Chromium 和 Nodejs 能以 Web 开发的模式打造桌面应用,开发用户界面又快捷又简单;Python 则在数据分析、自动化脚本等领域有非常多的应用。两者的社区生态都十分强大,由两者共同构建应用,在界面开发、功能、性能上能够强强联合;
为了简单验证技术可行性,我们来编写一个 Demo:
目的:验证 Electron 打造的桌面应用能够调用 Python,思路是使用 RPC 或 >
我们最近有个项目需要使用Node桌面版技术,正如大多数人一样,我的初次选型是NW,那么出乎意料,大坑来了!!!
倘若你的桌面版应用没有跟底层(C++模块)挂钩,也就是没有使用到消息推送、版本升级、打印功能之类的东西,但是bug还是挺多的。并且一旦使用到这些功能,你就彻底调到坑里了,nw有个致命的缺陷在于所有的非javascript编写的模块都需要重新用nw-gyp重新编译一下,这个编译的过程会出现各种各样的问题。而Electron几乎可以使用所有的node模块,只需要node-gyp编译的即可。主要深坑就在这!!!还有,NW不像Electron自带版本升级。
nw唯一的好处是啥?兼容window XP呗。
下载node压缩包(> wget
2 打开安装目录
cd /usr/local/src/node-v423-linux-x86/bin现在可以直接 使用 node 命令来运行nodejs程序了
3 配置系统环境
sudo vi /etc/profile// 输入root密码
// 将光标移至文件最下方,按i进入插入模式,输入:
# node
export NODE_HOME=/usr/local/src/node-v423-linux-x86
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules
// 输入完毕后,按下左上角esc键,接着轻敲
:wq!
// 来保存文件,然后输入:
source /etc/profile
// 使配置文件生效
4 完成
输入以下命令,若出现版本号,则标示node环境已经配置成功
node -v以上就是关于nodejs实现多进程(cluster 模式)全部的内容,包括:nodejs实现多进程(cluster 模式)、如何在centos6上部署nodejs服务、node.js适合做什么网站等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)