用 C 写 php 的扩展,跟用任意语言写 DLL 然后在 PHP 里调用,性能差别大么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linpf
V2EX    PHP

用 C 写 php 的扩展,跟用任意语言写 DLL 然后在 PHP 里调用,性能差别大么?

  •  
  •   linpf 2015-04-17 17:21:03 +08:00 4983 次点击
    这是一个创建于 3904 天前的主题,其中的信息可能已经有所发展或是发生改变。

    php学到最后肯定是需要学着去自己写C扩展的。但是我又在网上发现了php调用系统环境DLL的方案扩展。这样DLL可以用C#之类的语言来写。我想知道这两种方案的性能差异大吗?

    18 条回复    2015-04-18 19:59:14 +08:00
    whatisnew
        1
    whatisnew  
       2015-04-17 17:25:28 +08:00
    那么我想问 dll 是什么语言写的?还不是 c。。。那么同样都是用 c 写,为什么不直接 ext
    linpf
        2
    linpf  
    OP
       2015-04-17 17:26:57 +08:00
    @whatisnew 我正文里说过了啊。C#写的DLL,就可以用
    linpf
        3
    linpf  
    OP
       2015-04-17 17:29:01 +08:00
    @whatisnew 稍微查了一下,比如VB,C++,C#都可以写dll然后给PHP调用
    fliar
        4
    fliar  
       2015-04-17 17:30:23 +08:00
    首先你定c#的dll可以直接用?不需要加mono或者.net framework?
    kaizixyz
        5
    kaizixyz  
       2015-04-17 17:30:32 +08:00
    1楼正解。。
    linpf
        6
    linpf  
    OP
       2015-04-17 17:33:12 +08:00
    @fliar 在windows环境下编译出dll,然后注册到COM环境。PHP调用COM。
    fliar
        7
    fliar  
       2015-04-17 17:36:28 +08:00
    事情我在linux下做,是需要嵌入mono的,windows我有弄不了你,不方法我搜到,我建你先下,COM我得有就是了
    fliar
        8
    fliar  
       2015-04-17 17:49:24 +08:00
    忘了回正,ext的性能比dll好,dll法避加行的耗
    txlty
        9
    txlty  
       2015-04-17 18:43:27 +08:00
    楼主说的是标准COM组件。在WIN系统下,任何语言都可以调用。PHP当然也可以。
    hjc4869
        10
    hjc4869  
       2015-04-17 19:06:08 +08:00
    @fliar C#写COM还是很简单的。。
    linpf
        11
    linpf  
    OP
       2015-04-17 21:14:11 +08:00
    @txlty 性能咋样?会比用原生性能强吗?
    Ghoul2005
        12
    Ghoul2005  
       2015-04-18 01:08:20 +08:00
    前提是你确定你要在win系统下跑PHP么?win系统下还考虑什么性能。
    Actrace
        13
    Actrace  
       2015-04-18 08:01:39 +08:00
    window系统基本不会拿来做服务。。写出来又不能移植到其他系统,有何意义。。
    linpf
        14
    linpf  
    OP
       2015-04-18 10:26:54 +08:00
    @Ghoul2005 win也没那么不堪吧。。
    zhengkai
        15
    zhengkai  
       2015-04-18 13:31:25 +08:00
    win 当然有那么不堪,一个用来打游戏的平台,你用他来工作?没有精通算法你可能不会失业,但是继续用 win 真的是前途堪忧

    而且 PHP 的终点并不是去给 PHP 写扩展(虽然我年轻的时候也这么以为),而是 PHP(或者说后端语言)只是你要考虑的一部分,别太拖后腿就可以了。比方说,Laruence 去了新浪微博后,优化了使用效率,节了几百台机器,固然了不起,但是新浪微博这么大的量这么多年走下来,主要还是 Tim Yang 的架构做的好啊
    zhengkai
        16
    zhengkai  
       2015-04-18 13:39:56 +08:00
    另外回答正题,PHP 扩展的效率是非常不错的。PHP 之所以能活到现在,也正是因为本身不做太多事情,主要是对各个扩展之间起粘合作用,所以很快你就会发现,从本质上说,PHP 不是语言

    只有 PHP 的库,大部分都是用别的语言写的,这种奇耻大辱是其他语言没有过的
    msg7086
        17
    msg7086  
       2015-04-18 15:56:37 +08:00
    @zhengkai 也不算奇耻大辱吧。PHP脚本开发方便些,ext则是提高运行效率。
    两者结合在一起各自发挥好专长,怎么成耻辱了。
    wizardforcel
        18
    wizardforcel  
       2015-04-18 19:59:14 +08:00 via Android
    @linpf 当然是c语言写的dll效率高啊 这还用想么

    其实要搞粘合剂,最方便的是c#吧。原生支持com,用p/invoke来调用c写的dll。

    扩展有个好处,你以前写的轮子编译成dll拿过来直接用。谁也不想用php再写一遍吧。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5196 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 51ms UTC 07:17 PVG 15:17 LAX 23:17 JFK 02:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86