今天听人说 php 运算能力不比 java - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whatisnew
V2EX    PHP

今天听人说 php 运算能力不比 java

  •  
  •   whatisnew 2015-05-28 20:16:11 +08:00 11265 次点击
    这是一个创建于 3803 天前的主题,其中的信息可能已经有所发展或是发生改变。

    说是 php 内部使用一个大 hash 表来操作,运算能力比较弱,求证实。

    63 条回复    2015-05-31 22:04:21 +08:00
    thinkif
        1
    thinkif  
       2015-05-28 20:30:28 +08:00
    别听他们瞎说,“PHP是世界上最好的语言” 已经在论坛上达成共识了,不信你搜搜。。。
    whatisnew
        2
    whatisnew  
    OP
       2015-05-28 20:31:31 +08:00
    @thinkif 认真点,我们在这讨论内核呢
    yahoo21cn
        3
    yahoo21cn  
       2015-05-28 20:34:32 +08:00 via Android
    楼主你知罪吗
    silvernoo
        4
    silvernoo  
       2015-05-28 20:35:47 +08:00
    是是是,php是最好的语言。
    whatisnew
        5
    whatisnew  
    OP
       2015-05-28 20:36:43 +08:00
    问题出在 z_val ?
    gamexg
        6
    gamexg  
       2015-05-28 20:42:01 +08:00
    不需要在意这种性能问题吧?
    又不是数据库,堆机器就是。
    whatisnew
        7
    whatisnew  
    OP
       2015-05-28 20:44:44 +08:00
    @gamexg 亲,我们说的是内部实现,比如一个超大n维度的数组或者对象
    feiyuanqiu
        8
    feiyuanqiu &nbp;
       2015-05-28 20:59:33 +08:00
    @whatisnew 亲,我看着你的回帖怎么就感觉不靠谱呢,既然你要讨论 php 内核,至少你应该先看看 php 内核是怎么回事吧,
    不然待会巨巨们来了说一大堆干货,又只能看看热闹

    http://www.php-internals.com/book/
    lincanbin
        9
    lincanbin  
       2015-05-28 21:16:57 +08:00
    对的,数值运算方面确实远远不如Java。
    如果系统业务逻辑集中在计算的话建议使用Java,或者用Java做后端,PHP做前端。

    如果不是运算密集型的话就随意了。
    fancy967
        10
    fancy967  
       2015-05-28 21:17:40 +08:00
    @thinkif 你的头像我之前也很喜欢用耶
    endrollex
        11
    endrollex  
       2015-05-28 21:26:20 +08:00
    zts1993
        12
    zts1993  
       2015-05-28 21:33:33 +08:00
    是的,。但是你用PHP做科学运算了么。。
    whatisnew
        13
    whatisnew  
    OP
       2015-05-28 23:36:43 +08:00 via iPhone
    @zts1993 数据统计分析,一些复杂的算法,算不?
    hooluupog
        14
    hooluupog  
       2015-05-28 23:44:32 +08:00
    cpu密集型的运算可是jvm,JIT的强项,一旦虚拟机热起来,跑这种运算超过c/c++也不要感到惊讶。
    est
        15
    est  
       2015-05-28 23:45:53 +08:00
    java内部不是一个大hash表实现的。java内部是一个 AbstractSingletonProxyFactoryBean。再举个例子

    new ServiceExecutionJoinPoint(
    DistributedQueryAnalyzer.forwardQueryResult(
    NotificationSchemaManager.getAbstractSchemaMapper(
    new PublishSubscribeNotificationSchema()).getSchemaProxy().
    executePublishSubscribeQueryPlan(
    NotificationSchema.ALERT,
    new NotificationSchemaPriority(SchemaPriority.MAX_PRIORITY),
    new PublisherMessage(MessageFactory.getAbstractMessage(
    MessageType.WRITTEN,
    new MessageTransport(MessageTransportType.WOUNDED_SURVIVOR),
    new MessageSessionDestination(
    DestinationManager.getNullDestinationForQueryPlan()))),
    DistributedWarMachine.getPartyRoleManager().getRegisteredParties(
    PartyRoleManager.PARTY_KING ||
    PartyRoleManager.PARTY_GENERAL ||
    PartyRoleManager.PARTY_AMBASSADOR)).getQueryResult(),
    PriorityMessageDispatcher.getPriorityDispatchInstance())).
    waitForService();

    嘛呢叭咪
    xuwenmang
        16
    xuwenmang  
       2015-05-29 07:26:46 +08:00
    一个还没上市的公司,没什么资格谈php优劣。足够你用到亚洲首富的~!
    neo2015
        17
    neo2015  
       2015-05-29 09:01:31 +08:00
    Java做后端,PHP做前端,如今最普遍的选择
    hylent
        18
    hylent  
       2015-05-29 09:06:13 +08:00
    比如一个简单的long类型,与其它类型构成共用体zval_value,再加上类型信息以及引用计数等字段,构成了zval。php肯定要维护其它的一些信息,因此相比原生c代码计算会慢一些。
    不知道lz所谓计算是什么程度的计算。如果觉得计算是你的瓶颈,需要优化的话,可以开发一个php扩展来完成你的计算。扩展开发的话,可以考虑使用zephir,最新master分支支持了的internal function,或许会解决你的问题。
    至于java,不了解啊。
    thinkif
        19
    thinkif  
       2015-05-29 09:11:06 +08:00
    @fancy967
    握爪... 我在很多地方注册的账号都用这个头像呢
    yuankui
        20
    yuankui  
       2015-05-29 09:14:07 +08:00
    如果你用php处理超大n维数组,只能说明你们设计有问题的...
    yuankui
        21
    yuankui  
       2015-05-29 09:14:33 +08:00
    php就读读数据库,渲染渲染html即可..
    aksoft
        22
    aksoft  
       2015-05-29 09:23:07 +08:00
    你用C啊,你怎没不拿C和java比
    hylent
        23
    hylent  
       2015-05-29 09:28:04 +08:00   1
    PHP的数据结构一般都是用HashTable,这一种数据结构涵盖了其它语言的数组、字典、列表等。
    PHP内部在类属性、类方法、变量符号表、全局函数符号表等多处使用了HashTable。
    通过给定键找值,需要计算键的hash值,然后再遍历hash碰撞的情况(如果有)。这样的话就需要一些额外的计算,可能会对效率有影响。

    当然也有Spl系列的数据结构,不过用的不多,不知道效率怎么样。

    应该会有一些专门用于数学计算的库,它们的原理大概就是一个包装器,把php的变量解析出来转化为自己理解的数据类型,然后计算,然后将计算结果包装成php变量返回。这一般对效率不会有太大影响,可以尝试一下。
    jiongjionger
        24
    jiongjionger  
       2015-05-29 09:57:25 +08:00
    PHP的确不适合计算密集型应用。重度计算还要求低延迟的Java也不是很合适啊
    wdlth
        25
    wdlth  
       2015-05-29 10:06:38 +08:00
    大多搞科学计算的还是用Fortran,Intel的编译器、Nvidia的CUDA等都支持,讨论语言的数值运算速度是没有意义的。
    akstrom
        26
    akstrom  
       2015-05-29 10:16:51 +08:00
    数组一直是php的痛阿,何谓"超大n维度的数组或者对象",你考虑过php的感受没有?
    incompatible
        27
    incompatible  
       2015-05-29 10:18:09 +08:00
    @est AbstractSingletonProxyFactoryBean这种名字听起来就跟java语言和jvm没什么关系。
    没猜错的话应该是spring里的东西?
    RisingV
        28
    RisingV  
       2015-05-29 10:36:01 +08:00
    @incompatible spring的东西无疑
    ymdqqqq
        29
    ymdqqqq  
       2015-05-29 14:09:35 +08:00
    PHP确实各种用hash table,但并不是有东西都用同一个大table啊亲!!!

    至于数值运算、复杂的数据结构、算法实现,请调用现成的库函数或者正则,各种C++实现,性能有保证。

    如果你碰到库函数、正则都解决不了的问题,那多半有现成的工具可以解决。

    如果以上都解决不了你的问题,好吧你至少是几亿PV这个量级的了。。。

    最后再喊一句:PHP是世界最好的语言,不服来战^_^
    LittleMK
        30
    LittleMK  
       2015-05-29 16:43:45 +08:00
    世界上最烂的2种语言有啥好比的
    xiaxiaokang
        31
    xiaxiaokang  
       2015-05-29 16:44:26 +08:00
    @thinkif 听说nodejs是世界最牛逼的语言!
    1etters
        32
    1etters  
       2015-05-29 16:45:11 +08:00
    差很远的
    zhicheng
        33
    zhicheng  
       2015-05-29 16:49:23 +08:00
    天了噜,PHP 哪里来的自信要和 Java 比性能。你是百度出来的吗?
    aliang032
        34
    aliang032  
       2015-05-29 17:42:51 +08:00
    Zend引擎下PHP的运算能力比java差很多,不过HHVM下PHP的运算能力应该不比java差多少
    typcn
        35
    typcn  
       2015-05-29 18:16:40 +08:00
    Java 做表面上 benchmark 吹的多么多么
    下载下来不够 100 并发,装逼也得有个限度。

    如果单纯的输出网页 Hello World ,可以准确的告诉你,PHP 快。
    你要是做数学运算,Java 比 PHP 快,然而对于 NVIDIA CUDA 之类的 C 库/硬件计算,还是慢的翔都出来了。
    lvfujun
        36
    lvfujun  
       2015-05-29 18:21:24 +08:00
    @hooluupog 超过c\c++你开玩笑呢么.
    @aliang032 HHVM绝对不会比Java 差哪去.
    stanhou
        37
    stanhou  
       2015-05-29 18:32:00 +08:00
    网站的瓶颈永远在数据库端。这句话要我说几遍。
    hooluupog
        38
    hooluupog  
       2015-05-29 19:26:11 +08:00
    @lvfujun 开没开玩笑,你自己google一下就行。
    msg7086
        39
    msg7086  
       2015-05-29 20:07:01 +08:00
    java的运行速度已经被人笑话很久了
    deepreader
        40
    deepreader  
       2015-05-29 20:13:16 +08:00
    @stanhou https://www.techempower.com/benchmarks/ 虽然在数据库,但是动态语言还是很受伤。。。上java吧
    typcn
        41
    typcn  
       2015-05-29 20:41:00 +08:00
    @deepreader Java 不是动态语言?那是什么?翔?
    deepreader
        42
    deepreader  
       2015-05-29 20:47:16 +08:00
    @typcn Java动态了?求说明求赐教!
    typcn
        43
    typcn  
       2015-05-29 20:50:30 +08:00
    @deepreader 求把 Java 静态编译成可执行文件,我复制到几个不同的系统上跑跑试试?
    rwecho
        44
    rwecho  
       2015-05-29 21:06:02 +08:00
    “PHP是世界上最好的语言”
    yxwqwgz
        45
    yxwqwgz  
       2015-05-29 22:03:56 +08:00
    不知道为什么有人一直拿语言来说事,语言优劣话题挺重要,但是没必要一直挂在嘴上,否则就很无聊。

    我的理解是,“PHP是最好的语言”这句话也没错,任何话都是有语境的,他说这句话的时候,可能还没有ror, Python,Node.js等等,在那个时候,用 PHP 做 Web 方面的开发确实是最好的选择之一,比 Java 什么的方便多了。这个语境就是,1.没有发展出更加先进的 Web 开发模式 2.用于解决 Web 方面的问题。也有可能是表达不够精确的问题,或者是情感上更偏爱这种语言,有时候我们喜欢一个姑娘也会说,这个姑娘是世界上最漂亮的,尽管他知道并不是那样。

    现在大家都把那个语境抽掉,然后就觉得说这句话的人很可笑。

    之所以讲这些,是因为我就曾经有过类似的看法,我想很多选择 PHP 去开发网站的人,也抱有相同的看法:“PHP 是最适合的语言”,否则他们就会选择其他方案了。好像 V2EX 就是用 PHP 开发的吧?即便是在今天,用PHP来开发网站也是个不错的选择。
    deepreader
        46
    deepreader  
       2015-05-29 23:41:44 +08:00
    @typcn Dynamic compilation. 受教了。
    zonghua
        47
    zonghua  
       2015-05-30 00:57:12 +08:00 via iPhone
    @deepreader jsp就是啊
    typcn
        48
    typcn  
       2015-05-30 02:32:10 +08:00 via iPhone
    @deepreader 如果不能编译成 binary,那就是由解释器执行,这还不叫动态?难道运行到半中间能修改代码才叫动态?
    hooluupog
        49
    hooluupog  
       2015-05-30 09:06:06 +08:00
    @typcn 谁说java不能编译成binary的?AOT编译和JIT编译都是编译,java两者皆可。静态和动态语言之分说的是类型系统。关键在于有没有编译时的类型检查。php7,python的type hint做的事情就是添加类型注释,尽管如此,依然不能说是静态类型语言,因为它们添加的类型是可选的,即使不加也能跑起来。但在java里面你试试看能编译通过不。有的语言可以不加类型,但依然属于静态类型语言,比如ML系的,还有一些FP语言,比如haskell,因为它们有全局的类型推到系统,编译器已经帮你做了,不用你手动去写,但依然要做编译期的类型检查。好处就是可以把很多潜在的错误在运行时之前完全消除掉。
    hooluupog
        50
    hooluupog  
       2015-05-30 09:14:29 +08:00
    @typcn 你要的hello world。
    https://www.techempower.com/benchmarks/#section=data-r10&hw=peak&test=plaintext
    java嗦也就罢了,性能相比c/c++在某些情况下确实差。
    但什么语言都拿性能来在java面前装B就有点说不过去了。
    thinkif
        51
    thinkif  
       2015-05-30 09:15:41 +08:00
    @xiaxiaokang
    我大 JS 岂能容忍 nodejs 这种番邦自称『语言』...
    typcn
        52
    typcn  
       2015-05-30 09:18:01 +08:00
    @hooluupog 看 benchmark 没有意义,自己下载下来跑一炮
    Roboo
        53
    Roboo  
       2015-05-30 10:10:11 +08:00 via Android
    恭喜LZ成功掀起一场XX大战
    mikale
        54
    mikale  
       2015-05-30 12:14:00 +08:00
    PHP毕竟是最好的语言嘛,别听他们瞎说,PHP的内部实现是非一般的解释器,超越了『编译原理』的一般的规则,绝对是最先进的。LZ要有信心,加油。
    konata
        55
    konata  
       2015-05-30 12:16:47 +08:00
    就像倒数第一说倒数第二的语言运算速度快
    maxsec
        56
    maxsec  
       2015-05-30 12:29:10 +08:00
    程序的效率决定于写程序的人,而不是语言本身
    whatisnew
        57
    whatisnew  
    OP
       2015-05-30 12:41:46 +08:00
    @maxsec 亲,我们说的是底层实现哈
    huijiewei
        58
    huijiewei  
       2015-05-30 14:06:30 +08:00
    运算能力就是比不上

    业界公认的东西,不知道还在讨论个什么劲
    zjqzxc
        59
    zjqzxc  
       2015-05-31 01:18:22 +08:00
    今天听人说 php 写桌面应用不比 C,说是PHP。。。。
    如20,21楼所说,用PHP来做科学运算,,这得跟它有多大仇。PHP用来做网站操作下mysql就挺好,为嘛非得讨论它运算能力呢。是兔子就老老实实在地上跑,还非得跟乌龟比游泳,游泳这事就不是兔子擅长的。从事自己擅长的领域,把不擅长的事儿交给别人吧。
    MrZephyrus
        60
    MrZephyrus  
       2015-05-31 15:06:59 +08:00
    PHP仍然是世界上最好的语言
    hitsmaxft
        61
    hitsmaxft  
       2015-05-31 15:14:52 +08:00
    php 在分配内存这块, 几乎都抽象成 hashtable 的操作, 另外 gc 也相对简单, 所以相对于 java 能够使用堆和非堆之类手段,确实计算速度没法同期比较。

    所以纯 php 语言层面的计算确实比浪费内存有浪费 cpu , 唯一规避的方式就是把这些计算挪到 c 扩展里面, 避开 php 层的封装带来的资源消耗
    incompatible
        62
    incompatible  
       2015-05-31 21:59:07 +08:00
    @typcn 关于“动态语言”,你的理解实在太外行了
    http://www.zhihu.com/question/19918532


    另外"下载下来不够 100 并发,装逼也得有个限度。 "这是在讲笑话吗?
    你做的是什么应用? 是socket服务端?还是基于servlet引擎的web应用?
    是在什么配置的服务器上跑的?给jvm分配了多少堆内存?
    typcn
        63
    typcn  
       2015-05-31 22:04:21 +08:00
    @incompatible 了解了
    前几天看着 play 挺火的,我下载了 play 框架,搭建了一个输出 hello world 的小程序,用 ab 测试,并发简直难以置信
    (跑
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2493 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:39 PVG 18:39 LAX 03:39 JFK 06:39
    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