JAVA VS PHP

简介: 1,并发 vs 并行2.吞吐率(Requests per second)3,用户平均请求等待时间Time per request4,服务器平均请求等待时间(Time per request: across all concurrent requests)


小编最近经心情不大好,写一篇博文解解闷

在搞清楚java vs php前,我们需要熟悉一些基本概念才能很好的理解下面的对比,否则看了都感觉不知道什么意思

基本概念
1,并发 vs 并行
并发和并行进行区分还是挺简单的,并发是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机,如果串行,一个队列使用一台咖啡机,如果前面那个人接好咖啡一直不离开,会导致后面的人都没有咖啡喝.就像程序中一个独享资源被占用,其他线程就处于等待中一样,但是并发通过某种机制,比如时间分片等,规定每个人只能使用咖啡机30秒钟,那么1分钟当中,并发就可以做到2次,所以并发的大小和占用资源的时间是负相关的,资源占用时间短才能够做到高并发

2.吞吐率(Requests per second)
这个比较好理解,每秒能够处理的请求数,越大越好,说白了这个跟发动机功率一样,越大代表性能越强
计算公式:
Request per second = Complete requests / Time taken for tests

3,用户平均请求等待时间Time per request
计算公式:
处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数)
Time per request = Time taken for tests /( Complete requests / Concurrency Level)

4,服务器平均请求等待时间(Time per request: across all concurrent requests)
计算公式:
处理完成所有请求数所花费的时间 / 总请求数
Time taken for / testsComplete requests

php vs java
了解完了上面的这些基本概念,下面我们把PHP和java进行比较,本次实验条件说明(都在小编的电脑上,MacBook Pro Intel Core i7 2.2 GHz memory 16 GB,java和php都没有进行优化,php采用lnmp架构,java采用spring内嵌服务器,都输出一个相同json字符串接口)

对比一

ab -n 100 -c 10 http://192.168.200.299:8080/greeting?name=desheng

 
item java php
Concurrency Level 10 10
Time taken for tests 0.068 seconds 0.108 seconds
Complete requests 100 100
Failed requests 10 91
Total transferred 15604 bytes 19292 bytes
HTML transferred 3704 bytes 3592 bytes
Requests per second 1477.76 [#/sec] (mean) 922.77 [#/sec] (mean)
Time per request(user) 6.767 [ms] (mean) 10.837 [ms] (mean)
Time per request(server) 0.677 [ms] (mean, across all concurrent requests) 1.084 [ms] (mean, across all concurrent requests)
Transfer rate 225.19 [Kbytes/sec] received 173.85 [Kbytes/sec] received
总结:

从发现Time per request(server)这个指标中,我们可以看出java处理效率比php高,脚本语言不敌伪编译,可以预想的到,如果改成c/c++可能效率提升更加的大
从Requests per second指标中可以看出,java采用的是多线程,php采用的是多进程,java线程可以轻轻松松上千,php只能望洋兴叹了
对比二

ab -n 100 -c 100 http://www.yunying.com/?name=desheng

 
item java php
Concurrency Level 100 100
Time taken for tests 0.043 seconds 0.130 seconds
Complete requests 100 100
Failed requests 0 90
Total transferred 15700 bytes 19288 bytes
HTML transferred 3800 bytes 3588 bytes
Requests per second 2346.70 [#/sec] (mean) 768.95 [#/sec] (mean)
Time per request(user) 42.613 [ms] (mean) 130.047 [ms] (mean)
Time per request(server) 0.426 [ms] (mean, across all concurrent requests) 1.300 [ms] (mean, across all concurrent requests)
Transfer rate 359.80 [Kbytes/sec] received 144.84 [Kbytes/sec] received
总结:

对比一 vs 对比二中的Time per request(server),java居然越跑越快,php只会越跑越慢,这是因为java开启了JIT,对执行代码进行了优化,但是php没有开启opcahe,所以越来越慢了.
对比Requests per second数据,发现php死活超不了一千的槛,
对比三

ab -n 1000000 -c 1000 http://192.168.200.229:8080/greeting?name=desheng

 
item java php
Concurrency Level 1000
Time taken for tests 302.511 seconds
Complete requests 1000000
Failed requests 991501
Total transferred 159894503 bytes
HTML transferred 40894503 bytes
Requests per second 3305.66 [#/sec] (mean)
Time per request(user) 30.251 [ms] (mean)
Time per request(server) 0.303 [ms] (mean, across all concurrent requests)
Transfer rate 516.17 [Kbytes/sec] received
总结:

java还能跑,但是php已经被压挂了(pr_socket_recv: Connection reset by peer (104)),已经连接不上了
终结:

虽然我很喜欢php简单明了的设计理念,快速并且灵活开发应用,实现功能可以依托大神开发的扩展,但是如果对性能有要求的领域,php就不那么合适了.PHP官网是这么说PHP的:

“PHP is a popular general-purpose scripting language that is especially suited to web development.Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.”

从上面这句话中我们就能感觉到php并没有提到高性能,由此我们彻底的明白了,php面对巨大的编程市场,没有和java一样选择大而全的布局,而是希望有那么一群人,他们希望web编程的成本足够的低,开发的周期足够的短,但是完全能满足日常普通用户的访问需求.就像polo,普通版高尔夫,飞度等车型一样,他只能满足你日常代步的需求,但是你想让他上赛道比赛,输的命运很难改写.所以在创办企业选择编程语言的时候,先看看自己的预算,再看看自己的目标,差不多答案就有了.顺便回答一下facebook为什么用PHP,那是因为facebook刚开始没钱,而且没想到自己有这么火.今天就说到这里吧.点击下面连接来参加一个活动吧,
https://developer.aliyun.com/topic/java/blogger?taskCode=2455&recordId=e617869c6817eaf1db72e2bc7efcdf2f&accounttraceid=ea17b29c12b54a2a86d803225ba41721bsdb

邮件: joy@richardtumas.com

目录
相关文章
|
3月前
|
存储 缓存 安全
HashMap VS TreeMap:谁才是Java Map界的王者?
HashMap VS TreeMap:谁才是Java Map界的王者?
156 2
|
3月前
|
数据采集 缓存 Java
Python vs Java:爬虫任务中的效率比较
Python vs Java:爬虫任务中的效率比较
|
26天前
|
存储 缓存 Oracle
Java线程池,白话文vs八股文,原来是这么回事!
本文介绍了Java线程池的原理、实现方式及相关参数。首先,通过类比公司员工的方式解释了线程池的核心概念,如核心线程、最大线程数、任务队列和拒绝策略。接着,详细描述了线程池的任务处理流程,并提供了使用`ThreadPoolExecutor`和`Executors`创建线程池的代码示例,强调了`ThreadPoolExecutor`的灵活性和`Executors`的局限性。最后,总结了线程池的相关参数及不同类型的线程池实现,并附带常见面试题及其解答,帮助读者全面理解线程池的应用场景和优化方法。
41 4
|
3月前
|
安全 Java 程序员
Java集合之战:ArrayList vs LinkedList,谁才是你的最佳选择?
本文介绍了 Java 中常用的两个集合类 ArrayList 和 LinkedList,分析了它们的底层实现、特点及适用场景。ArrayList 基于数组,适合频繁查询;LinkedList 基于链表,适合频繁增删。文章还讨论了如何实现线程安全,推荐使用 CopyOnWriteArrayList 来提升性能。希望帮助读者选择合适的数据结构,写出更高效的代码。
141 3
ly~
|
4月前
|
安全 Java 大数据
php跟java有什么区别
PHP 和 Java 是两种常用编程语言,各有特色。PHP 语法简洁灵活,适用于快速开发中小型网站,尤其在 Web 脚本和数据库交互中表现出色。Java 则语法严谨,强类型特性使其在企业级应用、移动开发及大数据处理中更受欢迎,具备高稳定性和安全性。通过优化,PHP 性能可提升,而 Java 在大规模应用中表现更佳。总体而言,PHP 开发效率高但维护性稍差,Java 则更注重代码质量和安全性。
ly~
119 5
|
5月前
|
Java C++ 开发者
if-else VS switch:谁才是Java条件判断的王者?
if-else VS switch:谁才是Java条件判断的王者?
56 3
|
5月前
|
Java 应用服务中间件 PHP
PHP——调用java文件中的方法
PHP——调用java文件中的方法
67 0
PHP——调用java文件中的方法
|
5月前
|
传感器 C# 监控
硬件交互新体验:WPF与传感器的完美结合——从初始化串行端口到读取温度数据,一步步教你打造实时监控的智能应用
【8月更文挑战第31天】本文通过详细教程,指导Windows Presentation Foundation (WPF) 开发者如何读取并处理温度传感器数据,增强应用程序的功能性和用户体验。首先,通过`.NET Framework`的`Serial Port`类实现与传感器的串行通信;接着,创建WPF界面显示实时数据;最后,提供示例代码说明如何初始化串行端口及读取数据。无论哪种传感器,只要支持串行通信,均可采用类似方法集成到WPF应用中。适合希望掌握硬件交互技术的WPF开发者参考。
95 0
|
5月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
412 0
|
5月前
|
开发者 C# 容器
【独家揭秘】当WPF邂逅DirectX:看这两个技术如何联手打造令人惊艳的高性能图形渲染体验,从环境搭建到代码实践,一步步教你成为图形编程高手
【8月更文挑战第31天】本文通过代码示例详细介绍了如何在WPF应用中集成DirectX以实现高性能图形渲染。首先创建WPF项目并使用SharpDX作为桥梁,然后在XAML中定义承载DirectX内容的容器。接着,通过C#代码初始化DirectX环境,设置渲染逻辑,并在WPF窗口中绘制图形。此方法适用于从简单2D到复杂3D场景的各种图形处理需求,为WPF开发者提供了高性能图形渲染的技术支持和实践指导。
354 0