想精通node.js,是否需要学习C++?
想精通node.js,先入门javascript与node.js,然后做几个项目,其它的都是想太多了。
那如果你遇到了底层的内存泄露问题,如何解决,C++抛出的错,如何能看懂?
@sunweiconfidence 解决内存泄露也不一定就要会C艹。会用工具就好了,heapdump和devtool结合用就好了。如果想全面一套来直接上alinode也很不错,现在还免费了。 之前有人通过换内存分配器到jemalloc解决内存泄露才亮瞎了我的眼,我挂了一天机硬是没复现。
来自酷炫的 CNodeMD
除了node.js的开发者,其它有几个人敢说自己精通了node.js
同样的也适用于其它语言 :joy
不需要 语言只是工具 真要出问题要用到c++时 只能说是那个c++模块太失败 或者nodejs底层的失败 不要用野生模块 比如很久不维护的 issue少的 作者不积极的 用这些是给自己找坑
@sunweiconfidence Node存在的价值就是让你只需要关心业务和JS问题,不需要关注底层C++、操作系统、硬件等问题。所以像内存泄漏这种问题,你得看是业务层算法导致的还是底层BUG,算法导致的自己优化算法,底层BUG导致的给Node提Issue或自己尝试解决然后提Pull Request;C++错误直接提Issue就可以了。
Node支持C++模块,如果有CPU密集型需求可以写C++模块来解决,这时候就需要学C++。 但一般非CPU密集型业务,用JS足够了。
后端技术栈中,引擎、语言、框架只是冰山一角,更多的是架构问题,比如负载均衡、消息总线、缓存机制、信息安全等等,除非你真的十分感兴趣Node底层技术,否则建议还是多了解一下后端架构解决方案吧。
@zy445566 google 的 tcmalloc 也可以这么干,不过 jemalloc 和 tcmalloc 本意都是做内存分配优化的,拿来查泄漏 hmmmmm
@hyj1991 之前看到别的论坛上发这个,说是node内存消耗不断增大直到挂掉,而且小机器必现,当时第一感觉认为这个情况是内存泄漏。 当时作者也说不是内存泄漏,但他本人也不知道原因。 但仔细想想也有可能是内存碎片过于零散,内存无法成整块,从而无法分配给下次内存使用,造成的不断堆积。但想想设计内存系统的人不至于出这种问题,加上当时怎么都复现不了(仅rss有波动,但都是可接受范围),目前事情多了,所以没继续证实了。
看你想精通到什么程度了,如果是想精通到Nodejs是怎么写出来的,实现原理,那么是需要懂c++的,如果说精通到日常的内存管理和问题解决,那么是不需要的。
PHP 也是 C(++) 写的,但是在 PHP 社区怎么没人问“精通PHP需要学习C++吗?”
看来前端还是对 JavaScript 不够自信。
@justjavac 以前做PHP的时候,身边的人就老把zval挂在嘴边
来自酷炫的 CNodeMD
@zy445566 哈哈哈哈
要的。c++ addons 是 nodejs 重要的部分,nodejs 生态还不是很完善,我觉得前端nodejs 和 nodejs服务 是二个不同的领域。。。。
@zy445566 老哥看你头像很年轻的呀,怎么感觉工作经历那么丰富哈哈哈(纯属疑问)
@cnlile 后端生态次于java而已 比肩php 比go生态好太多 只不过用的人少 国内没有国外热
@heguangda 我刚换了照片,昨晚之前的照片是我年轻时候的,现在这张看起来也不年轻了吧,可能你是有缓存了吧。
谢谢以上各位大佬的耐心解答
不需要
@cnlile 特别赞同你说的前端nodejs 和 nodejs服务 是二个不同的领域
这个要看你对精通的定义了。 我认为所有上层语言(python php等)要想真的学到精通,必须还是得懂c c++。 说到底虚拟机封装了底层实现对我们来说还是个黑盒。 最基本的,nodejs的性能来源libuv是用c++写的,不懂c++就等于不懂libuv的实现原理,不懂libuv的实现原理,好意思说自己精通了node?
精通nodejs语言需要c++,精通nodejs不需要c++。
Node支持Rust模块,如果有需求也可以写Rust模块来解决,不过多学学C++也是好的,不过不是必须。
这样说吧,想做一个牛逼的后端 C 和 C++ 是必须懂的,不用多精通但必须要能看懂,如果你是一个前端用 nodejs, 那就没有必要了
@zy445566 rss增长但heap正常的问题我也碰到了,github还有相关讨论,都是说换jemalloc才能解决问题:https://github.com/nodejs/help/issues/1518
@youth7 可惜看晚了,估计在线服务应用都会遇到一模一样的问题。