主要考虑到V8单线程下的效率,不想用cluster功能,因为各子进程还是相互独立的,没啥实际用途,反而破环了JS的共享空间,让队列等功能无法实施,要这样还不如直接用PHP
最近发现win和linux对单线程的CPU的调度似乎不同?自己也不是很懂,多核CPU(比如4核)windows好像把负载平均分配到了每个核心,Linux则是单核心一直跑满,还望行家解释一下…
如果在linux下单核心跑满,WINDOW下就是每个核心25%负载,那么如果负载继续增加的话,win下有没有可能把每个核心跑到50%甚至更高,也就是单线程能跑到linux的2倍?
在下愚钝,还望高手释惑…
这个如果熟悉Linux或听过大牛讲课就知道,Linux下进程可以绑定cpu的。 cpu负载跟逻辑有关,我问过一下人,他们都说瓶颈不在cpu,占用率基本都比较低,他们压力测试也顶多60,70多。 如果cpu跑满了肯定没有发挥他异步io的强项,node.js目前的发展方向来说并不是用来取代php的。
压力测试并发是多少呢,我这边AB测试并发超过800CPU就窜到90+进程假死了,差一点的VPS连200并发都扛不住
用的是express2.x输出helloworld进行的测试
而且cnodejs.org,在列表页按住F5不放服务器就502了
可见作为WEB应用来讲JAVASCRIPT还是很吃CPU的,因为每个请求都要初始化很多东西,NODE官方出cluster不也说明多核CPU的利用是个问题吗
只是想问问在windows下情况会不会好点:) CPU调度和内存利用这些底层技术WIN操作系统应该比LINUX强很多…
可以考虑 “零秒” 系统,多线程并发,每个并发模块独享一个 V8 的 Isolate,在 64 位的系统下我尝试跑过 512 个并发模块(可以看成 512 线程,但还是有微妙不同),效率还是很不错的。
“零秒” 的设计思路是,让 C 尽可能多的处理数据,而 Js 用来处理业务逻辑。用 Js 来处理数据个人认为不是个好办法,尤其是用 Js 来设计 WebServer 这样的。
我个人对 NodeJs 的思路并不是很认同,其一是过分注重 Js,C 的代码很少其实。其二是其过于注重异步方式,我曾经长期从事复杂实时系统的研发,就我个人的经验来看,真正需要异步交互的地方,应该是关键路径,就是那些及其需要效率,非异步不可的。而很多操作,可以用同步方式来完成,因为同步是最简单,概念最清楚的方式。
把本来可以用同步方式来做的一些对于效率要求不是很高的操作来做成异步,会把逻辑搞得不必要地复杂,难写,难读,难调试。