C与PHP速度对照
C与PHP速度对比
一直就知道PHP是C写的,网上大部分实际应用消耗性能的模块就是由PHP的拓展C来重写的,网上曾经看过百度的一篇大话PHP性能 ,对此文看法很是赞同的。
很早就相对PHP和C进行一个亲测的对比了,无奈当时对于Zend API不了解,现在本文就是亲自来测试一下C与PHP的差距。
我想不好拿什么来测试,于是题目就是对一个大小为3000的数组进行冒泡排序,看时间。
一共分为3种情况
- C实现
- PHP实现
- PHP的C拓展,由PHP产生数组,然后交给C处理数据
1.C实现
#include <stdlib.h> #include <stdio.h> #include "time.h" int main(int arg,char **argv) { clock_t start_time = clock(); int data[3000]; int i; int length=sizeof(data)/sizeof(int); for(i=0; i<length;i++) { data[i] = rand()%10000+1; } int j,temp; for(i=0;i<length;i++) { for(j=0;j<length-1-i;j++) { if(data[j] > data[j+1]) { temp = data[j]; data[j] = data[j+1]; data[j+1] = temp; } } } /* for(i=0;i<length;i++) { printf("%d\n",data[i]); }*/ clock_t end_time = clock(); float time = (double)(end_time-start_time)/CLOCKS_PER_SEC; printf("use time: %f",time); return 0; }
2.PHP
<?php $start_time =microtime(true); $data =array(); for($i=0; $i<3000; $i++) { array_push($data,rand(0,10000)); } // var_dump($data); $temp; for($i=0;$i<count($data);$i++) { for($j=0;$j<count($data)-1-$i;$j++) { if($data[$j] > $data[$j+1]) { $temp = $data[$j]; $data[$j] = $data[$j+1]; $data[$j+1] = $temp; } } } // var_dump($data); $end_time =microtime(true); $time = $end_time-$start_time; echo "use time:" ,$time;
3.PHP的C拓展,由PHP产生数组,然后交给C处理数据
PHP_FUNCTION(bubble) { zval *array; zval **item; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,"a",&array)==FAILURE) { return; } int i; int count; count = zend_hash_num_elements(Z_ARRVAL_P(array)); int j,temp; int data[count]; zend_hash_internal_pointer_reset(Z_ARRVAL_P(array)); for(i=0;i<count;i++) { zend_hash_get_current_data(Z_ARRVAL_P(array),(void**)&item); data[i]=(int)Z_STRVAL_PP(item); zend_hash_move_forward(Z_ARRVAL_P(array)); } for(i=0;i<count;i++) { for(j=0;j<count-1-i;j++) { if(data[j] > data[j+1]) { temp = data[j]; data[j] = data[j+1]; data[j+1] = temp; } } } for(i=0;i<count;i++) { php_printf("%d\n",data[i]); } }
然后在PHP里调用
<?php $start_time =microtime(true); $data =array(); for($i=0; $i<3000; $i++) { $data[$i]=rand(0,10000); } echo bubble($data); $end_time =microtime(true); $time = $end_time-$start_time; echo "use time:" ,$time;
经过对此测试
#C与PHP速度的差别
测试手段对一个大小3000的数组进行排序
1.C
use time: 0.090000-0.110000
2.PHP
use time:11.867825984955
3.PHP拓展(C)
use time:0.12569403648376
我们可以清楚地看到C比PHP在这个情况下快上100+多倍,PHP的拓展把模块转为C来处理,也同样可以减小差距。
这中间的差距,一方面肯定是PHP与C不同的弱类型变量(PHP的变量在内核里是用zval表示的,里面抽象了7种变量,long,float,obj,array等),还有夸张的函数封装(目测这个很吃性能),导致速度上不去了。
不过这个例子可能没啥代表性,不过我们同样可以了解个大概了。
由此我们可以知道为什么PHP这么多函数都是用C写的了,PHP基本上大部分的外置函数都是采用C来写的,pear和pecl由此应运而生,难怪一个不会写C的PHP程序员不是真的好程序员。
中国PHP界的大牛laruence的Yaf 就是用C写的,传说中速度最快的PHP的Web框架。有机会的真的想研读一下源码。
原文来自独立博客 http://blog.imsuzie.com/archives/573

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
