[原创]PHP和SHELL运行简单命令效率对比_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3188 | 回复: 0   主题: [原创]PHP和SHELL运行简单命令效率对比        下一篇 
wulcan
版主
等级:中校
经验:1795
发帖:124
精华:0
注册:2014-3-19
状态:离线
发送短消息息给wulcan 加好友    发送短消息息给wulcan 发消息
发表于: IP:您无权察看 2015-7-24 16:40:23 | [全部帖] [楼主帖] 楼主

Shell是系统管理的主要语言,但是PHP有时也比较方便,特别是在逻辑很复杂的时候,shell写起来很不方便,但是Shell和PHP之间的效率到底能差多少呢?本人先针对简单的命令做了个实验,实验的目的是创建6万多个ng界面,然后再销毁,分别用php和shell来实现:

1、SHELL


创建代码:

 % cat ng.sh
#!/bin/sh
for i in $(seq 0 65535); do
/usr/sbin/ngctl mkpeer iface dummy inet
if [ $? -ne 0 ] ; then
echo "failed $i";
break;
else
echo "success $i";
fi
done


执行结果:

 success 65376
success 65377
ngctl: send msg: Cannot allocate memory
failed 65378
26.517u 56.724s 5:28.96 25.3% 40+166k 0+0io 0pf+0w


销毁代码:

% cat clearng.sh
#!/bin/sh
for i in $(seq 65530); do
/usr/sbin/ngctl shutdown ng$i:
if [ $? -ne 0 ] ; then
echo "failed $i";
break;
else
echo "success $i";
fi
done


执行结果:

 success 65377
success 65378
ngctl: shutdown: No such file or directory
failed 65379
29.035u 592.914s 11:16.56 91.9% 36+171k 0+0io 0pf+0w
2、PHP


创建代码:

 % cat create.php
for ( $i=1; $i<=65530; $i++ ){
      $cmd = 'ngctl mkpeer iface dummy inet';
      system( $cmd, $r );
      if( $r > 0 ){
            echo "Fail in " . $i . "\n";
            break;
      }else{
      echo "Success " . $i . "\n";
}
}
?>


结果:

 Success 65376
Success 65377
Success 65378
ngctl: send msg: Cannot allocate memory
Fail in 65379
46.924u 103.514s 4:09.67 60.2% 275+178k 0+0io 1pf+0w


销毁代码:

 % cat clear.php
for ( $i=0; $i<=65538; $i++ ){
      $cmd = 'ngctl shutdown ng' . $i . ":";
      system( $cmd, $r );
      if( $r > 0 ){
            echo "Fail in " . $i . "\n";
            break;
      }else{
      echo "Success " . $i . "\n";
}
}
?>


执行结果:

Success 65374
Success 65375
Success 65376
Success 65377
Success 65378
ngctl: shutdown: No such file or directory
Fail in 65379
49.034u 637.340s 12:07.22 94.3% 99+174k 0+0io 0pf+0w


总结表:


创建

 SHELL: 26.517u 56.724s 5:28.96 25.3% 40+166k 0+0io 0pf+0w
PHP: 46.924u 103.514s 4:09.67 60.2% 275+178k 0+0io 1pf+0w


销毁

 SHELL: 29.035u 592.914s 11:16.56 91.9% 36+171k 0+0io 0pf+0w
PHP: 49.034u 637.340s 12:07.22 94.3% 99+174k 0+0io 0pf+0w


1、创建的时候,用户态时间和系统时间,以及CPU占用,PHP多出来接近一倍
2、销毁的用户态时间和系统时间,以及CPU占用,PHP多出来不到10%
3、PHP的内存占用要多的多,这也跟需要解释器有关系

结论:


对于简单的命令,尽量还是用SHELL吧,不需要在系统和语言中切换,会节省很多时间。PHP在使用system和exec时,会先调用shell,再由shell运行真正的命令,然后再返回到PHP中,这无疑是个很大的开销。但是如果PHP能直接调用C的库文件,可能性能会有极大的提高——这不就是PHP模块了吗?

至于复杂的命令,一时间还没想好,下次再做吧,争取能稍微对PHP有利一点。



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论