锁定老帖子 主题:PHP会倒掉吗?
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-26
为什么总是要拿php和java什么的比呢,蚂蚁就是蚂蚁,自有一片天地,干不了大象的活,大象要踩死蚂蚁也没那么容易。
|
|
返回顶楼 | |
发表时间:2009-11-26
jamesvz 写道 为什么总是要拿php和java什么的比呢,蚂蚁就是蚂蚁,自有一片天地,干不了大象的活,大象要踩死蚂蚁也没那么容易。
这位兄弟说的有道理,事实就是这样的。 大家都拿一些流行的语言及其社区来进行比较,殊不知PHP与其他语言有很明显的区别,因此做这样的比较就是拿蚂蚁和大象比较一样。 用java说事儿主要是偶才疏学浅,只接触过JAVA和LINUX社区,所谓枪打出头鸟嘛,既然JAVA排在第一,拿它来说事儿就更具说明性。呵呵。 |
|
返回顶楼 | |
发表时间:2009-11-26
不要在讨论这个无聊的问题了。php本身开源,如果热爱它,发现了他的错误,就想办法改进它吧。
|
|
返回顶楼 | |
发表时间:2009-11-26
yipsilon 写道
fireflyc 写道
4.很好,php既然是为了互联网项目而生那么为什么整个社区要开展起一个向企业应用进军的浪潮呢?而且已经成为了php的一个事实前进方向。难道这个方向最后的结果不是谋杀PHP吗? 所以我的结论依然成立,如果PHP选择一个错误的目标,如果社区再继续推动这股浪潮。那么杀害PHP的元凶便是phper自己。
我倒是没听过国外有哪家官方支持的PHP社区喊这个口号(难道是国内的社区??),如果你找到了,麻烦贴出来个网址,我进去瞅瞅,然后再证明你的结论依然成立。现在光在这里误导别人没什么用。
|
|
返回顶楼 | |
发表时间:2009-11-26
最后修改:2009-11-26
我觉得楼主没有清楚认识到为什么有些人说PHP的发展方向不对的问题。
PHP的优势本来就是草根+简单,可是目前PHP的发展貌似不是这样的,N多的人更喜欢用PHP4版本的,而不愿意以用PHP5版本。 有几位网友说的很多了,不再重复一些反驳的言论,举几个例子。 我们公司网站,不说所有吧,就说个播放页,每天8000万的PV,31台Tomcat。我举这个例子并不是想说Tomcat性能有多强,因为整个网站的架构好坏和核心的编程语言并没有直接关系,例如优酷就是PHP的,但是PV数也很高。 但是我们公司历史上正好有一段PHP转向Java的历程,原因有很多,我说一下个人感觉的和技术直接有关的一些细节吧。 个人以为php就是个模板语言而已,和高性能根本搭不边,也不需要高性能,从业务逻辑上来讲,典型的PHPer更多的是把业务逻辑堆砌在了数据库中了,而不是php代码中,有部分原因是php语言本身不适合做太复杂的业务逻辑算法。 php(主要是PHP4)本身的优点也是它的缺点,每次请求全部加载相关的资源,请求结束然后全部释放,这个特性对草根来说非常好,不用担心某些资源不被释放,不用担心内存泄漏的问题。但是这个优点恰恰是双刃剑,很明显,如果每次请求,在php代码中有很复杂的资源加载过程,每次请求都加载无疑是浪费系统资源。 举个例子,连接池,PHP无法自己实现,还不是靠第三方的C实现?为什么,因为PHP自己无法像某些语言那样,有一个全局的内存环境。 有人会说,这个不重要,大部分应用都是程序等数据库,瓶颈在数据库。恩,一句话扔给数据库,表面上看和php没关系了,那就再举个例子。 例如我从数据库中取1000个记录,然后按照较复杂的逻辑在内存中排序(假定排序算法复杂,不适合在数据库中操作),那么排序结果或者某些中间计算结果,对于java来说最简单的就是随便搞个static变量就可以了(java中如果要单击统计一台机器上的某些数字,只要搞个static AtomicInteger就能轻松搞定,而且性能极高),稍微复杂点的,用本地cache(其是还是java类),再复杂点考虑集群的话,用memcached,啊,有人又会跳出来说,php也可以用memcached,是啊,没错,是可以用,但是不需要任何数据动不动就放数据库或者memcached吧,毕竟有相当数量的数据是实时性要求不高,但是又没必要每次请求都要计算的,memcached毕竟是一次网络连接,速度没办法和本地计算相比的。 前面说到php的优点,自动释放资源,听起来有点像JVM中的垃圾回收,这个类比还算贴切吧,但是问题来了,java强其实就是强在JVM上,以前叫垃圾回收,其实就是内存管理(经过十几年的发展,JVM的内存管理已经非常先进了),相比之下php的只按照请求来自动释放资源的内存管理手法太单一了,如何算高性能呢,某些测评很片面的,没什么可看的,哪有什么网站,后台逻辑简单到只要展现页面就行了?这里再说一下数据库的问题,不能总拿数据库作挡箭牌,就算数据库是挡箭牌,功劳也不是php的,如果真要拿数据库说事,要说开发部署难易程度,还是asp.net最简单、最快,而不是php。 继续说,由于php的资深限制,我们的网站以前有不少是PHP+crontab来完成很多后台定时任务,现在的运维经常抱怨这些“垃圾”都清理不干净,说说是PHP,结果还是依赖OS的定时任务,如果是java来写,很多后台任务写起来超简单的,而且整个过程相对来说调试起来容易多了。 再举例子,写个程序,最多2000个网络并发,验证4000万个图片的有效性,用PHP写写看这种并发程序?不过这个例子不太好,因为不是web应用了。 PHP倒掉是不太可能的,但是也用不着用贬低其他解决方案的方式来提高PHP的地位吧。 |
|
返回顶楼 | |
发表时间:2009-11-26
最后修改:2009-11-26
icewubin 写道 我觉得楼主没有清楚认识到为什么有些人说PHP的发展方向不对的问题。
PHP的优势本来就是草根+简单,可是目前PHP的发展貌似不是这样的,N多的人更喜欢用PHP4版本的,而不愿意以用PHP5版本。 有几位网友说的很多了,不再重复一些反驳的言论,举几个例子。 我们公司网站,不说所有吧,就说个播放页,每天8000万的PV,31台Tomcat。我举这个例子并不是想说Tomcat性能有多强,因为整个网站的架构好坏和核心的编程语言并没有直接关系,例如优酷就是PHP的,但是PV数也很高。 但是我们公司历史上正好有一段PHP转向Java的历程,原因有很多,我说一下个人感觉的和技术直接有关的一些细节吧。 个人以为php就是个模板语言而已,和高性能根本搭不边,也不需要高性能,从业务逻辑上来讲,典型的PHPer更多的是把业务逻辑堆砌在了数据库中了,而不是php代码中,有部分原因是php语言本身不适合做太复杂的业务逻辑算法。 php(主要是PHP4)本身的优点也是它的缺点,每次请求全部加载相关的资源,请求结束然后全部释放,这个特性对草根来说非常好,不用担心某些资源不被释放,不用担心内存泄漏的问题。但是这个优点恰恰是双刃剑,很明显,如果每次请求,在php代码中有很复杂的资源加载过程,每次请求都加载无疑是浪费系统资源。 举个例子,连接池,PHP无法自己实现,还不是靠第三方的C实现?为什么,因为PHP自己无法像某些语言那样,有一个全局的内存环境。 有人会说,这个不重要,大部分应用都是程序等数据库,瓶颈在数据库。恩,一句话扔给数据库,表面上看和php没关系了,那就再举个例子。 例如我从数据库中取1000个记录,然后按照较复杂的逻辑在内存中排序(假定排序算法复杂,不适合在数据库中操作),那么排序结果或者某些中间计算结果,对于java来说最简单的就是随便搞个static变量就可以了(java中如果要单击统计一台机器上的某些数字,只要搞个static AtomicInteger就能轻松搞定,而且性能极高),稍微复杂点的,用本地cache(其是还是java类),再复杂点考虑集群的话,用memcached,啊,有人又会跳出来说,php也可以用memcached,是啊,没错,是可以用,但是不需要任何数据动不动就放数据库或者memcached吧,毕竟有相当数量的数据是实时性要求不高,但是又没必要每次请求都要计算的,memcached毕竟是一次网络连接,速度没办法和本地计算相比的。 前面说到php的优点,自动释放资源,听起来有点像JVM中的垃圾回收,这个类比还算贴切吧,但是问题来了,java强其实就是强在JVM上,以前叫垃圾回收,其实就是内存管理(经过十几年的发展,JVM的内存管理已经非常先进了),相比之下php的只按照请求来自动释放资源的内存管理手法太单一了,如何算高性能呢,某些测评很片面的,没什么可看的,哪有什么网站,后台逻辑简单到只要展现页面就行了?这里再说一下数据库的问题,不能总拿数据库作挡箭牌,就算数据库是挡箭牌,功劳也不是php的,如果真要拿数据库说事,要说开发部署难易程度,还是asp.net最简单、最快,而不是php。 继续说,由于php的资深限制,我们的网站以前有不少是PHP+crontab来完成很多后台定时任务,现在的运维经常抱怨这些“垃圾”都清理不干净,说说是PHP,结果还是依赖OS的定时任务,如果是java来写,很多后台任务写起来超简单的,而且整个过程相对来说调试起来容易多了。 再举例子,写个程序,最多2000个网络并发,验证4000万个图片的有效性,用PHP写写看这种并发程序?不过这个例子不太好,因为不是web应用了。 PHP倒掉是不太可能的,但是也用不着用贬低其他解决方案的方式来提高PHP的地位吧。 每天8000万的PV,31台Tomcat,用php都用不了10台就能顶住。我估计java程序优化一下其实也用不着那许多。虽然从语言上说,php比java慢,但是java的应用服务器本身的复杂性拖累了java应用的性能。所以很多时候并比不上php。 php语言本身确实不适合做太复杂的业务逻辑算法。不过绝大多数情况下也没啥负载的业务逻辑算法可做。就是有,对java而言也未必会自己去实现。如果用的第三方应用,也就无所谓是啥语言实现的。比如用全文检索,用solr或者sphinx都是选择。另外,在一些涉及到低层的东西,java不是也得用jni么 说到连接池,php+mysql其实不怎么需要连接池。因为连接mysql的速度本来就很快,必要时也可以再用上持久连接。不比oracle,没了连接池就没法活。 说到效率,1000条记录在php和java里排序的差异是可以忽略的。除非有超过百万的数据才有得比较。而真有那么大数据 的时候,从数据库传回应用服务器的开销就足以抵消这点性能差异了。 你是搞java的,而且对php不了解。php也是有垃圾回收的,虽然是比较简单的引用计数方式。每个请求结束自动释放资源是只是防止程序员失误的一个功能而已。同样也可以让某些资源不在请求结束后释放,比如持久链接。对java而言,也很少会把数据放到请求的上下文环境之外,何况这种做法会对可扩展性带来不小麻烦。 至于后台任务,虽然不是php的强项,但是也不会有多大障碍。不能因为你们的php写的不好就说是php做不了这事。而对于一些php做不好的后台任务,我也会用python来写,而不是java。因为更方便比如你说到的图片检测。 楼主举的例子是不太合适。不过对于很多网站来说,尤其是web2.0应用,php确实是个很不错的选择。但对于ERP, CRM之类的,还得用java。 |
|
返回顶楼 | |
发表时间:2009-11-26
市面上任何一种语言,只要你能找出它的100个优点,我就必然能够给你找出它的100个缺点;反之,只要你能找出它的100个缺点,我就必然能够给你找出它的100个优点
为什么这么想不开,要用一种狭隘的眼光来比较甚至预言? |
|
返回顶楼 | |
发表时间:2009-11-26
syre 写道 icewubin 写道 我觉得楼主没有清楚认识到为什么有些人说PHP的发展方向不对的问题。
PHP的优势本来就是草根+简单,可是目前PHP的发展貌似不是这样的,N多的人更喜欢用PHP4版本的,而不愿意以用PHP5版本。 有几位网友说的很多了,不再重复一些反驳的言论,举几个例子。 我们公司网站,不说所有吧,就说个播放页,每天8000万的PV,31台Tomcat。我举这个例子并不是想说Tomcat性能有多强,因为整个网站的架构好坏和核心的编程语言并没有直接关系,例如优酷就是PHP的,但是PV数也很高。 但是我们公司历史上正好有一段PHP转向Java的历程,原因有很多,我说一下个人感觉的和技术直接有关的一些细节吧。 个人以为php就是个模板语言而已,和高性能根本搭不边,也不需要高性能,从业务逻辑上来讲,典型的PHPer更多的是把业务逻辑堆砌在了数据库中了,而不是php代码中,有部分原因是php语言本身不适合做太复杂的业务逻辑算法。 php(主要是PHP4)本身的优点也是它的缺点,每次请求全部加载相关的资源,请求结束然后全部释放,这个特性对草根来说非常好,不用担心某些资源不被释放,不用担心内存泄漏的问题。但是这个优点恰恰是双刃剑,很明显,如果每次请求,在php代码中有很复杂的资源加载过程,每次请求都加载无疑是浪费系统资源。 举个例子,连接池,PHP无法自己实现,还不是靠第三方的C实现?为什么,因为PHP自己无法像某些语言那样,有一个全局的内存环境。 有人会说,这个不重要,大部分应用都是程序等数据库,瓶颈在数据库。恩,一句话扔给数据库,表面上看和php没关系了,那就再举个例子。 例如我从数据库中取1000个记录,然后按照较复杂的逻辑在内存中排序(假定排序算法复杂,不适合在数据库中操作),那么排序结果或者某些中间计算结果,对于java来说最简单的就是随便搞个static变量就可以了(java中如果要单击统计一台机器上的某些数字,只要搞个static AtomicInteger就能轻松搞定,而且性能极高),稍微复杂点的,用本地cache(其是还是java类),再复杂点考虑集群的话,用memcached,啊,有人又会跳出来说,php也可以用memcached,是啊,没错,是可以用,但是不需要任何数据动不动就放数据库或者memcached吧,毕竟有相当数量的数据是实时性要求不高,但是又没必要每次请求都要计算的,memcached毕竟是一次网络连接,速度没办法和本地计算相比的。 前面说到php的优点,自动释放资源,听起来有点像JVM中的垃圾回收,这个类比还算贴切吧,但是问题来了,java强其实就是强在JVM上,以前叫垃圾回收,其实就是内存管理(经过十几年的发展,JVM的内存管理已经非常先进了),相比之下php的只按照请求来自动释放资源的内存管理手法太单一了,如何算高性能呢,某些测评很片面的,没什么可看的,哪有什么网站,后台逻辑简单到只要展现页面就行了?这里再说一下数据库的问题,不能总拿数据库作挡箭牌,就算数据库是挡箭牌,功劳也不是php的,如果真要拿数据库说事,要说开发部署难易程度,还是asp.net最简单、最快,而不是php。 继续说,由于php的资深限制,我们的网站以前有不少是PHP+crontab来完成很多后台定时任务,现在的运维经常抱怨这些“垃圾”都清理不干净,说说是PHP,结果还是依赖OS的定时任务,如果是java来写,很多后台任务写起来超简单的,而且整个过程相对来说调试起来容易多了。 再举例子,写个程序,最多2000个网络并发,验证4000万个图片的有效性,用PHP写写看这种并发程序?不过这个例子不太好,因为不是web应用了。 PHP倒掉是不太可能的,但是也用不着用贬低其他解决方案的方式来提高PHP的地位吧。 每天8000万的PV,31台Tomcat,用php都用不了10台就能顶住。我估计java程序优化一下其实也用不着那许多。虽然从语言上说,php比java慢,但是java的应用服务器本身的复杂性拖累了java应用的性能。所以很多时候并比不上php。 php语言本身确实不适合做太复杂的业务逻辑算法。不过绝大多数情况下也没啥负载的业务逻辑算法可做。就是有,对java而言也未必会自己去实现。如果用的第三方应用,也就无所谓是啥语言实现的。比如用全文检索,用solr或者sphinx都是选择。另外,在一些涉及到低层的东西,java不是也得用jni么 说到连接池,php+mysql其实不怎么需要连接池。因为连接mysql的速度本来就很快,必要时也可以再用上持久连接。不比oracle,没了连接池就没法活。 说到效率,1000条记录在php和java里排序的差异是可以忽略的。除非有超过百万的数据才有得比较。而真有那么大数据 的时候,从数据库传回应用服务器的开销就足以抵消这点性能差异了。 你是搞java的,而且对php不了解。php也是有垃圾回收的,虽然是比较简单的引用计数方式。每个请求结束自动释放资源是只是防止程序员失误的一个功能而已。同样也可以让某些资源不在请求结束后释放,比如持久链接。 至于后台任务,虽然不是php的强项,但是也不会有多大障碍。不能因为你们的php写的不好就说是php做不了这事。而对于一些php做不好的后台任务,我也会用python来写,而不是java。因为更方便比如你说到的图片检测。 楼主举的例子是不太合适。不过对于很多网站来说,尤其是web2.0应用,php确实是个很不错的选择。但对于ERP, CRM之类的,还得用java。 神仙的结论我是赞同的,对很多网站来说,PHP是个很不错的选择。 1、但是java的应用服务器本身的复杂性拖累了java应用的性能 坦白的说,Nginx、Apache等在跑静态页面的时候,确实比Tomcat高效得多,但Nginx + PHP FastCGI 或者 Apache ModPHP在跑纯PHP内容的时候,性能是不及同等复杂程度跑在Tomcat的JSP的,而且性能要低很多。Java的应用服务器作为容器,其实是非常高效的,不要那它和Nginx、Apache比 2、说到连接池,php+mysql其实不怎么需要连接池 实际上我现在总是得用PHP连接Oracle,我觉得,连接池其实是很重要的。PHP不能永远使用MySQL,pconnect这种粗放的资源管理方式其实是有问题的,第一,不很高效(非常少的连接被稀释在大量的PHP进程或者线程TLS中,导致生产环境下pconnect效率并不高);第二,无法控制连接数量(很常见,DBA要求我控制连接数为一个很小的数)。 |
|
返回顶楼 | |
发表时间:2009-11-26
最后修改:2009-11-26
syre 写道 每天8000万的PV,31台Tomcat,用php都用不了10台就能顶住。我估计java程序优化一下其实也用不着那许多。虽然从语言上说,php比java慢,但是java的应用服务器本身的复杂性拖累了java应用的性能。所以很多时候并比不上php。
php语言本身确实不适合做太复杂的业务逻辑算法。不过绝大多数情况下也没啥负载的业务逻辑算法可做。就是有,对java而言也未必会自己去实现。如果用的第三方应用,也就无所谓是啥语言实现的。比如用全文检索,用solr或者sphinx都是选择。另外,在一些涉及到低层的东西,java不是也得用jni么 说到连接池,php+mysql其实不怎么需要连接池。因为连接mysql的速度本来就很快,必要时也可以再用上持久连接。不比oracle,没了连接池就没法活。 说到效率,1000条记录在php和java里排序的差异是可以忽略的。除非有超过百万的数据才有得比较。而真有那么大数据 的时候,从数据库传回应用服务器的开销就足以抵消这点性能差异了。 你是搞java的,而且对php不了解。php也是有垃圾回收的,虽然是比较简单的引用计数方式。每个请求结束自动释放资源是只是防止程序员失误的一个功能而已。同样也可以让某些资源不在请求结束后释放,比如持久链接。对java而言,也很少会把数据放到请求的上下文环境之外,何况这种做法会对可扩展性带来不小麻烦。 至于后台任务,虽然不是php的强项,但是也不会有多大障碍。不能因为你们的php写的不好就说是php做不了这事。而对于一些php做不好的后台任务,我也会用python来写,而不是java。因为更方便比如你说到的图片检测。 楼主举的例子是不太合适。不过对于很多网站来说,尤其是web2.0应用,php确实是个很不错的选择。但对于ERP, CRM之类的,还得用java。 1.是不需要这么多,因为这31台是公用的,但是看你说这口气,唉。。。微观上来说网站性能瓶颈又不是在页面生成上,不要老说一句“java服务器端的复杂性”,那里复杂了,说出具体的东西来,我还说PHP每次请求都加载一堆东西复杂呢。 2.我说php不适合做复杂的业务逻辑,本质上是想说明phper习惯于把一些语言自己可以做的问题扔给数据库,这和jni有什么关系,jni调用什么呢?难道C么?能快多少?我用java外排序4000万个ID只要112秒(E4500的台式机),为什么还需要jni? 3.连接池的问题上你太搞笑了,这句话“连接mysql的速度本来就很快”根本就是马太效应,第一个人说了以后大多数人都以为很快,这个很快是相对的PHP自己原来的那种方式,如果不使用第三方的连接池,同样是连mysql,速度根本就不能和jdbc比的。 4.排序问题不要钻牛角尖,本来就是举例子,例如MD5加密之类的,网站刚开始会很简单,随着业务越来越复杂,各种算法就会越来越复杂,一个比较经典的例子就是搜索,最早的站内搜索(甚至于google建站之前),不都是各个网站自己写的?但是随着搜索这种应用的特殊性(相对一般逻辑,算法巨复杂),这个时候算法消耗系统资源的程度绝对是超过一半的数据库应用的。当然这个话题扯远了,搜索已经复杂到要专门的系统来处理了,不过可以听听,JE是ruby写的,好像搜索一样是用java的lucene吧。PHP语言既然也是主流语言,怎么不搞个php版的lucene呢? 5.对java来说,不存在这种说法“很少会把数据放到请求的上下文环境之外”,业务是什么特点,就是什么做法,可扩展性本来就是分布式计算中的一个小问题而已,例如在线用户统计为例,两种做法,第一种是用户每登录一次,就写一次远程的memcached或者数据库,第二种是每1000次登录再写远程的memcached或者数据库,同样都是把数据放到请求的上下文环境之外的分布式计算,但是第二种方式在java中实现就非常方便。 6.对,后台任务的例子是举的不好,那是例外一个话题,就是说,你的招人成本,你认为找一个精通PHP+crontab+python的人需要多少钱?我招一个java的才多少钱? 7.搞笑你去看看很多大型“web2.0应用”,前端web的语言都不是重点,网站的后台逻辑架构才是重点。 |
|
返回顶楼 | |
发表时间:2009-11-26
杀鸡焉用宰牛刀?宰牛怎用杀鸡刀?
没什么好挣的。世界上有永远都需要杀鸡刀,也需要宰牛刀的。 |
|
返回顶楼 | |