说是 php 内部使用一个大 hash 表来操作,运算能力比较弱,求证实。
1
thinkif 2015-05-28 20:30:28 +08:00
别听他们瞎说,“PHP是世界上最好的语言” 已经在论坛上达成共识了,不信你搜搜。。。
|
3
yahoo21cn 2015-05-28 20:34:32 +08:00 via Android
楼主你知罪吗
|
4
silvernoo 2015-05-28 20:35:47 +08:00
是是是,php是最好的语言。
|
5
whatisnew OP 问题出在 z_val ?
|
6
gamexg 2015-05-28 20:42:01 +08:00
不需要在意这种性能问题吧?
又不是数据库,堆机器就是。 |
8
feiyuanqiu 2015-05-28 20:59:33 +08:00
@whatisnew 亲,我看着你的回帖怎么就感觉不靠谱呢,既然你要讨论 php 内核,至少你应该先看看 php 内核是怎么回事吧,
不然待会巨巨们来了说一大堆干货,又只能看看热闹 http://www.php-internals.com/book/ |
9
lincanbin 2015-05-28 21:16:57 +08:00
对的,数值运算方面确实远远不如Java。
如果系统业务逻辑集中在计算的话建议使用Java,或者用Java做后端,PHP做前端。 如果不是运算密集型的话就随意了。 |
11
endrollex 2015-05-28 21:26:20 +08:00
|
12
zts1993 2015-05-28 21:33:33 +08:00
是的,。但是你用PHP做科学运算了么。。
|
14
hooluupog 2015-05-28 23:44:32 +08:00
cpu密集型的运算可是jvm,JIT的强项,一旦虚拟机热起来,跑这种运算超过c/c++也不要感到惊讶。
|
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(); 唵嘛呢叭咪吽 |
16
xuwenmang 2015-05-29 07:26:46 +08:00
一个还没上市的公司,没什么资格谈php优劣。足够你用到亚洲首富的~!
|
17
neo2015 2015-05-29 09:01:31 +08:00
Java做后端,PHP做前端,如今最普遍的选择
|
18
hylent 2015-05-29 09:06:13 +08:00
比如一个简单的long类型,与其它类型构成共用体zval_value,再加上类型信息以及引用计数等字段,构成了zval。php肯定要维护其它的一些信息,因此相比原生c代码计算会慢一些。
不知道lz所谓计算是什么程度的计算。如果觉得计算是你的瓶颈,需要优化的话,可以开发一个php扩展来完成你的计算。扩展开发的话,可以考虑使用zephir,最新master分支支持了的internal function,或许会解决你的问题。 至于java,不了解啊。 |
20
yuankui 2015-05-29 09:14:07 +08:00
如果你用php处理超大n维数组,只能说明你们设计有问题的...
|
21
yuankui 2015-05-29 09:14:33 +08:00
php就读读数据库,渲染渲染html即可..
|
22
aksoft 2015-05-29 09:23:07 +08:00
你用C啊,你怎没不拿C和java比
|
23
hylent 2015-05-29 09:28:04 +08:00 1
PHP的数据结构一般都是用HashTable,这一种数据结构涵盖了其它语言的数组、字典、列表等。
PHP内部在类属性、类方法、变量符号表、全局函数符号表等多处使用了HashTable。 通过给定键找值,需要计算键的hash值,然后再遍历hash碰撞的情况(如果有)。这样的话就需要一些额外的计算,可能会对效率有影响。 当然也有Spl系列的数据结构,不过用的不多,不知道效率怎么样。 应该会有一些专门用于数学计算的库,它们的原理大概就是一个包装器,把php的变量解析出来转化为自己理解的数据类型,然后计算,然后将计算结果包装成php变量返回。这一般对效率不会有太大影响,可以尝试一下。 |
24
jiongjionger 2015-05-29 09:57:25 +08:00
PHP的确不适合计算密集型应用。重度计算还要求低延迟的Java也不是很合适啊
|
25
wdlth 2015-05-29 10:06:38 +08:00
大多搞科学计算的还是用Fortran,Intel的编译器、Nvidia的CUDA等都支持,讨论语言的数值运算速度是没有意义的。
|
26
akstrom 2015-05-29 10:16:51 +08:00
数组一直是php的痛阿,何谓"超大n维度的数组或者对象",你考虑过php的感受没有?
|
27
incompatible 2015-05-29 10:18:09 +08:00
@est AbstractSingletonProxyFactoryBean这种名字听起来就跟java语言和jvm没什么关系。
没猜错的话应该是spring里的东西? |
28
RisingV 2015-05-29 10:36:01 +08:00
@incompatible spring的东西无疑
|
29
ymdqqqq 2015-05-29 14:09:35 +08:00
PHP确实各种用hash table,但并不是所有东西都用同一个大table啊亲!!!
至于数值运算、复杂的数据结构、算法实现,请调用现成的库函数或者正则,各种C++实现,性能有保证。 如果你碰到库函数、正则都解决不了的问题,那多半有现成的工具可以解决。 如果以上都解决不了你的问题,好吧你至少是几亿PV这个量级的了。。。 最后再喊一句:PHP是世界最好的语言,不服来战^_^ |
30
LittleMK 2015-05-29 16:43:45 +08:00
世界上最烂的2种语言有啥好比的
|
31
xiaxiaokang 2015-05-29 16:44:26 +08:00
@thinkif 听说nodejs是世界最牛逼的语言!
|
32
1etters 2015-05-29 16:45:11 +08:00
差很远的
|
33
zhicheng 2015-05-29 16:49:23 +08:00
天了噜,PHP 哪里来的自信要和 Java 比性能。你是百度出来的吗?
|
34
aliang032 2015-05-29 17:42:51 +08:00
Zend引擎下PHP的运算能力比java差很多,不过HHVM下PHP的运算能力应该不比java差多少
|
35
typcn 2015-05-29 18:16:40 +08:00
Java 做表面上 benchmark 吹的多么多么屌
下载下来不够 100 并发,装逼也得有个限度。 如果单纯的输出网页 Hello World ,可以准确的告诉你,PHP 快。 你要是做数学运算,Java 比 PHP 快,然而对于 NVIDIA CUDA 之类的 C 库/硬件计算,还是慢的翔都出来了。 |
37
stanhou 2015-05-29 18:32:00 +08:00
网站的瓶颈永远在数据库端。这句话要我说几遍。
|
39
msg7086 2015-05-29 20:07:01 +08:00
java的运行速度已经被人笑话很久了
|
40
deepreader 2015-05-29 20:13:16 +08:00
@stanhou https://www.techempower.com/benchmarks/ 虽然在数据库,但是动态语言还是很受伤。。。上java吧
|
41
typcn 2015-05-29 20:41:00 +08:00
@deepreader Java 不是动态语言?那是什么?翔?
|
42
deepreader 2015-05-29 20:47:16 +08:00
@typcn Java动态了?求说明求赐教!
|
43
typcn 2015-05-29 20:50:30 +08:00
@deepreader 求把 Java 静态编译成可执行文件,我复制到几个不同的系统上跑跑试试?
|
44
rwecho 2015-05-29 21:06:02 +08:00
“PHP是世界上最好的语言”
|
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来开发网站也是个不错的选择。 |
46
deepreader 2015-05-29 23:41:44 +08:00
@typcn Dynamic compilation. 受教了。
|
47
zonghua 2015-05-30 00:57:12 +08:00 via iPhone
@deepreader jsp就是啊
|
48
typcn 2015-05-30 02:32:10 +08:00 via iPhone
@deepreader 如果不能编译成 binary,那就是由解释器执行,这还不叫动态?难道运行到半中间能修改代码才叫动态?
|
49
hooluupog 2015-05-30 09:06:06 +08:00
@typcn 谁说java不能编译成binary的?AOT编译和JIT编译都是编译,java两者皆可。静态和动态语言之分说的是类型系统。关键在于有没有编译时的类型检查。php7,python的type hint做的事情就是添加类型注释,尽管如此,依然不能说是静态类型语言,因为它们添加的类型是可选的,即使不加也能跑起来。但在java里面你试试看能编译通过不。有的语言可以不加类型,但依然属于静态类型语言,比如ML系的,还有一些FP语言,比如haskell,因为它们有全局的类型推到系统,编译器已经帮你做了,不用你手动去写,但依然要做编译期的类型检查。好处就是可以把很多潜在的错误在运行时之前完全消除掉。
|
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就有点说不过去了。 |
51
thinkif 2015-05-30 09:15:41 +08:00
@xiaxiaokang
我大 JS 岂能容忍 nodejs 这种番邦自称『语言』... |
53
Roboo 2015-05-30 10:10:11 +08:00 via Android
恭喜LZ成功掀起一场XX大战
|
54
mikale 2015-05-30 12:14:00 +08:00
PHP毕竟是最好的语言嘛,别听他们瞎说,PHP的内部实现是非一般的解释器,超越了『编译原理』的一般的规则,绝对是最先进的。LZ要有信心,加油。
|
55
konata 2015-05-30 12:16:47 +08:00
就像倒数第一说倒数第二的语言运算速度快
|
56
maxsec 2015-05-30 12:29:10 +08:00
程序的效率决定于写程序的人,而不是语言本身
|
58
huijiewei 2015-05-30 14:06:30 +08:00
运算能力就是比不上
业界公认的东西,不知道还在讨论个什么劲 |
59
zjqzxc 2015-05-31 01:18:22 +08:00
今天听人说 php 写桌面应用不比 C,说是PHP。。。。
如20,21楼所说,用PHP来做科学运算,,这得跟它有多大仇。PHP用来做网站操作下mysql就挺好,为嘛非得讨论它运算能力呢。是兔子就老老实实在地上跑,还非得跟乌龟比游泳,游泳这事就不是兔子擅长的。从事自己擅长的领域,把不擅长的事儿交给别人吧。 |
60
MrZephyrus 2015-05-31 15:06:59 +08:00
PHP仍然是世界上最好的语言
|
61
hitsmaxft 2015-05-31 15:14:52 +08:00
php 在分配内存这块, 几乎都抽象成 hashtable 的操作, 另外 gc 也相对简单, 所以相对于 java 能够使用堆和非堆之类手段,确实计算速度没法同期比较。
所以纯 php 语言层面的计算确实比浪费内存有浪费 cpu , 唯一规避的方式就是把这些计算挪到 c 扩展里面, 避开 php 层的封装带来的资源消耗 |
62
incompatible 2015-05-31 21:59:07 +08:00
@typcn 关于“动态语言”,你的理解实在太外行了
http://www.zhihu.com/question/19918532 另外"下载下来不够 100 并发,装逼也得有个限度。 "这是在讲笑话吗? 你做的是什么应用? 是socket服务端?还是基于servlet引擎的web应用? 是在什么配置的服务器上跑的?给jvm分配了多少堆内存? |
63
typcn 2015-05-31 22:04:21 +08:00
|