我们都知道node是因为Javascript语言的特性 (即:单线程 + event-loop)所以做到了节省服务器资源,以及相对的高性能节省资源我能理解,但高性能,虽然我能理解一部分,但我假设了一种场景,然后我就想不通了比如有一个功能,函数体主要是查询一个数据库表的数据,假设同一时间有10000次的并发量来访问,那么接下来假设执行栈中10000次的执行一瞬间完成之后,任务队列里这时候就会有10000个等待执行的回调函数在排队。那这么看的话,性能上也不见得会快啊,或者node有适合的应对机制?比如java的话,我可以用多台服务器以分布式部署的方式,用硬件的量来打破这个瓶颈(虽然钱上面的开销就。。)那node的话,cpu就是直接的瓶颈了,那该肿么样处理这个问题呢?刚刚初学node,这是我现在不理解的地方。请各位大神指点~
1 回答

万千封印
TA贡献1891条经验 获得超3个赞
我们从两个角度来看node的效率
一:从工具的角度来看
在我们准备要做一款产品或是实现一个功能的时候,其中很重要的一步就是技术选型,根据产品的特点和开发周期来评估(真是情况会复杂的多很多因素会影响技术选型)
node的优势就是动态语言门槛学习相对(c/c++)较低。
甚至会javascript的前端同学稍微指导一下就能写。
二:从性能角度来看
又不会像PHP传通的LAMP多进程那一套效率低。
单线程异步特点项目前期即使不前后端分离也能有不俗的吞吐量。
三:但是也有缺点
项目后期单线程异步比起传统的同步逻辑的编程调试会复杂点。
过于底层的操作性能低,例如操作文件。
动态语言没有严格的变量类型,对于大的项目来说增加调试难度,不过这些问题可以用现有的typescript解决
四:如果正确使用
现在我在项目中的做法是node做介入层仅仅只负责渲染页面用,请求发送到api服务器放入消息队列,消费端用go来实现业务逻辑(保证高效稳定)。
添加回答
举报
0/150
提交
取消