<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[不辨不明]nodejs通过扩展pm2解决多核心利用问题是真解决问题了吗？Swoole为何没有这样去做的原因分析。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Thu, 18 Feb 2016 09:49:49 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：今天在swoole群里贴了一个nodejs和swoole的形象区别，于是出现了两派互相不服的文字争论，nodejs高大上的部署方式-PM2和swoole自带的一个辩论。<br/><br/>下面3点摘自：http://blog.csdn.net/leftfist/article/details/41891407<br/>1）CPU密集型任务存在短板<br/>如上所述，nodejs的机制是单线程，这个线程里面，有一个事件循环机制，处理所有的请求。如图所示。在事件处理过程中，它会智能地将一些涉及到IO、网络通信等耗时比较长的操作，交由worker threads去执行，执行完了再回调，这就是所谓的异步IO非阻塞吧。但是，那些非IO操作，只用CPU计算的操作，它就自己扛了，比如算什么斐波那契数列之类。它是单线程，这些自己扛的任务要一个接着一个地完成，前面那个没完成，后面的只能干等。因此，对CPU要求比较高的CPU密集型任务多的话，就有可能会造成号称高性能，适合高并发的node.js服务器反应缓慢。结论是：NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。<br/><br/>2）无法利用CPU的多核<br/>最开始，线程只是用于分配单个处理器处理时间的一种机制。但假如操作系统本身支持多个CPU/内核，那么每个线程都可以得到一个不同自己的CPU/内核，实现真正的“并行运算”。在这种情况下，多线程程序可以提高资源使用效率。Node.js是单线程程序，它只有一个event loop，也只占用一个CPU/内核。现在大部分服务器都是多CPU或多核的，当Node.js程序的event loop被CPU密集型的任务占用，导致有其它任务被阻塞时，却还有CPU/内核处于闲置的状态，造成资源的浪费。<br/><br/>解决方案<br/>利用原生模块或第三方模块，开辟进程或子进程，用于处理这些特殊的任务。<br/>3）如果有异常抛出，因为是单线程，整个项目将不可用。但这归根到底是代码的问题，糟糕的代码，不管什么体系，都会有问题，即使不崩溃。解决办法是用pm2等工具来运行？<br/><br/>说到密集型计算：其实PHP也好不到哪儿去，这块还得c和c++，解释性的语言对于密集型计算都好不到哪去，这块即使是nginx也可能出现事件队列出现阻塞的情况，（见：http://jackxiang.com/post/8433/）：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nodejs的机制是单线程，这个线程里面，有一个事件循环机制，处理所有的请求。如图所示。在事件处理过程中，它会智能地将一些涉及到IO、网络通信等耗时比较长的操作，交由worker threads去执行，执行完了再回调，这就是所谓的异步IO非阻塞吧。但是，那些非IO操作，只用CPU计算的操作，它就自己扛了，比如算什么斐波那契数列之类。它是单线程，这些自己扛的任务要一个接着一个地完成，前面那个没完成，后面的只能干等。因此，对CPU要求比较高的CPU密集型任务多的话，就有可能会造成号称高性能，适合高并发的node.js服务器反应缓慢。<br/>=======================================================================================<br/>附录，对话记录，QQ及Email均*替代，保留昵称：<br/>回忆未来-向东-Jàck(********7693) 15:48:05 <br/>作为顾问，必须把这个swoole形象化，<br/>swoole解决了nodejs的这样一个问题：<br/><a href="http://www.jackxiang.com/attachment.php?fid=439" target="_blank"><img src="http://www.jackxiang.com/attachment.php?fid=439" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a> <br/>无聊咔咔(*******) 15:51:47<br/>用swoole就不用部署啊<br/>忘却浮生(********0660) 15:52:33 <br/>node怎样的问题哦<br/>@PUPPY@&lt;puppywang@vip.qq.com&gt; 15:54:01 <br/>双击查看原图<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 15:54:02 <br/>无聊咔咔&nbsp;&nbsp;15:51:47<br/>用swoole就不用部署啊<br/>不用部署是个什么意思？不用安装在机器上就能用吗？<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 15:55:07 <br/>@无聊咔咔 http://pm2.keymetrics.io/<br/>无聊咔咔(********3145) 15:55:09 <br/>安装个扩展也算部署么<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 15:55:37 <br/>对啊，pm2 就是个启动命令，跟你启动 swoole 的程序一样。<br/>无聊咔咔(********3145) 15:55:51 <br/>有点吊<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 15:55:54 <br/>pm2 不需要你特别改写你的程序，swoole 你要用扩展来写程序<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 15:56:19 <br/>还有强大的监控界面<br/>@PUPPY@&lt;puppywang@vip.qq.com&gt; 15:57:07 <br/>strongloop也不错<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 15:57:43 <br/>嗯，所以不要随便黑nodejs，nodejs可用的东西实在是太多了<br/><br/>无聊咔咔(********3145) 15:59:18 <br/>哪敢啊，js除了回调蛋疼点<br/>无聊咔咔(********3145) 15:59:21 <br/>其他其实都还好<br/>回忆未来-向东-Jàck(********7693) 16:00:48 <br/>nodejs的兄弟，不要随便理解那个图的含义，我是想说这个：<br/>作者：韩天峰<br/>链接：http://www.zhihu.com/question/29453255/answer/44726099<br/>摘录：<br/>并行问题，node.js是单线程的，无法利用到服务器的所有CPU。想要解决只能自己用cluster/child_process扩展自行实现。如果不熟悉多进程/多线程编程，这会非常困难，很容易出现BUG。而swoole是内置多线程/多进程，完全不需要用户考虑，配置一下进程数即可。<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 16:05:03 <br/>@回忆未来-向东-Jàck 我说的就是这个，nodejs是单线程的，所以开发程序的时候不需要考虑并发产生的各种问题，而pm2又可以直接在部署的时候直接把多核多CPU利用起来，所以更不需要自己操心多线程编程问题，不用多线程，照样跑满所有CPU，这不是大家梦寐以求的吗？<br/>无聊咔咔(********3145) 16:06:45 <br/>这么叼，Rango呢，快来力排众议双击查看原图<br/>Mr.Gray&lt;******@qq.com&gt; 16:07:00 <br/>顾问顶住<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 16:07:05 <br/>所以 swoole 的最大优势是让php开发人员不需要学nodejs，也可以做 nodejs 能做的事情。<br/>半桶水&lt;shenzhe163@gmail.com&gt; 16:07:44 <br/>pm2能解决进程间的通信么？<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 16:08:18 <br/>做nodejs编程不需要考虑进程间通讯啊<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 16:09:50 <br/>如果非要自己搞进程间通讯，有 process 模块，还是内置模块<br/>有个鬼(********633) 16:12:36 <br/>es6标准让js 强大很多<br/>Mr.Gray&lt;******@qq.com&gt; 16:13:45 <br/>没人护驾吗？<br/>无聊咔咔(********3145) 16:14:25 <br/>我来护驾，js我不会写，所以我选择swoole，算一票么<br/>无聊咔咔(********3145) 16:14:28 <br/>双击查看原图<br/>Dean(********9726) 16:14:49 <br/>php还是最屌的<br/>有个鬼(********633) 16:14:52 <br/>放心吧<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 16:14:54 <br/>算，因为这个理由就是我说的理由双击查看原图<br/>有个鬼(********633) 16:15:07 <br/>php还是最容易的<br/>无聊咔咔(********3145) 16:15:14 <br/>小马哥调转枪头<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 16:15:36 <br/>我前面说了，swoole的优势就是：swoole就是给不会nodejs的php开发人员准备的<br/>Dean(********9726) 16:15:47 <br/>php也会有async的<br/>小马哥[̲̅V̲̅I̲̅P̲̅]&lt;******@qq.com&gt; 16:16:36 <br/>不用跟 nodejs 比，会用 nodejs，爱用 nodejs 的人尽管取用 nodejs。不会 nodejs 只会 php 的，用 swoole 就是首选。<br/>Dean(********9726) 16:19:30 <br/>所以swoole是牛逼的<br/>Laruence(********15) 16:19:37 <br/>必须的!<br/><br/>回忆未来-向东-Jàck(********7693)&nbsp;&nbsp;17:23:38<br/>直接在部署的时候直接把多核多CPU利用起来，请看清楚，是直接，直接。<br/>这是武功的最高境界，比如：那个《功夫》里面小弟遇到事情了，<br/>他是这样处理的，一支穿云箭千军万马来相见，这说明他不直接：<br/><a href="http://www.jackxiang.com/attachment.php?fid=440" target="_blank"><img src="http://www.jackxiang.com/attachment.php?fid=440" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>这是一个哲学问题，也就是说在核心的地方必须高度耦合，<br/>正所谓：高耦合，低内聚，这种思想是我一个物理都晓得。<br/><a href="http://www.jackxiang.com/attachment.php?fid=441" target="_blank"><img src="http://www.jackxiang.com/attachment.php?fid=441" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><br/>最后，如果发现swoole出现bug啥的，产生了coredump或打开coredump获取到coredump怎么办？<br/>打开coredump的办法：http://jackxiang.com/post/7627/<br/>假如出现问题怎么办？当然是立马解决了，办法如下：<br/>蓝天&lt;******@qq.com&gt;&nbsp;&nbsp;17:34:02<br/>就是产生core dump的时候你打开系统内核开关，会生成一个文件<br/>http://wiki.swoole.com/wiki/page/10.html<br/>：）看这个<br/>然后把结果给天峰即可
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [不辨不明]nodejs通过扩展pm2解决多核心利用问题是真解决问题了吗？Swoole为何没有这样去做的原因分析。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>