有点反认知,分别用 PHP 与 Java Spring Boot 写了个返回 1 个像素点图片的接口,结果 php 比 java 快。
PHP 代码
<?php
//xpng.php
header("Content-type: image/png");
echo base64_decode("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4////fwAJ+wP9CNHoHgAAAABJRU5ErkJggg==");
Java 代码
//XController.java
package com.abtest;
import java.util.Base64;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class XController {
@RequestMapping("/x.png")
public ResponseEntity<byte[]> xpng() {
String onepointpngBase64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4////fwAJ+wP9CNHoHgAAAABJRU5ErkJggg==";
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.set("Content-type", "image/png");
byte[] decodedValue = Base64.getDecoder().decode(onepointpngBase64);
return new ResponseEntity<byte[]>(decodedValue, responseHeaders, HttpStatus.OK);
}
}
Server 分别 SpringBoot Jar 包自带的 Apache Tomcat/9.0.24
PHP 就是 PHP 7.0.33-0+deb9u1 (cli) 自带的低性能调试用 server (使用php -S localhost:7767 -t .
运行)
AB 结果反直觉,PHP 居然比 Java 快
$ ab -n 1000 -c 1000 "http://localhost:7767/xpng.php"
This is ApacheBench, Version 2.3 <$Revision: 1757674 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:
Server Hostname: localhost
Server Port: 7767
Document Path: /xpng.php
Document Length: 70 bytes
Concurrency Level: 1000
Time taken for tests: 0.125 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 190000 bytes
HTML transferred: 70000 bytes
Requests per second: 8011.99 [#/sec] (mean)
Time per request: 124.813 [ms] (mean)
Time per request: 0.125 [ms] (mean, across all concurrent requests)
Transfer rate: 1486.60 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 6 5.5 8 14
Processing: 5 22 20.1 13 69
Waiting: 4 22 20.2 12 69
Total: 8 29 21.3 19 71
Percentage of the requests served within a certain time (ms)
50% 19
66% 24
75% 37
80% 62
90% 68
95% 70
98% 70
99% 70
100% 71 (longest request)
$ ab -n 1000 -c 1000 "http://localhost:8080/x.png"
This is ApacheBench, Version 2.3 <$Revision: 1757674 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:
Server Hostname: localhost
Server Port: 8080
Document Path: /x.png
Document Length: 70 bytes
Concurrency Level: 1000
Time taken for tests: 0.498 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 188000 bytes
HTML transferred: 70000 bytes
Requests per second: 2007.85 [#/sec] (mean)
Time per request: 498.046 [ms] (mean)
Time per request: 0.498 [ms] (mean, across all concurrent requests)
Transfer rate: 368.63 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 3.2 0 11
Processing: 5 73 63.3 48 237
Waiting: 3 64 56.7 41 194
Total: 5 74 66.0 48 247
Percentage of the requests served within a certain time (ms)
50% 48
66% 63
75% 76
80% 88
90% 216
95% 225
98% 229
99% 234
100% 247 (longest request)
1
metinfo 2019-09-23 11:58:51 +08:00
PHP7 确实效率提高了不少
|
2
ccalywm 2019-09-23 11:59:43 +08:00 10
PHP 是世界上最好的语言
|
3
zgqq 2019-09-23 12:10:40 +08:00 1
你用原生的 php 和 封装了 n 层的 spring boot 比。。。
|
4
srx1982 2019-09-23 12:11:09 +08:00
别用 spring 试试
|
5
guyeu 2019-09-23 12:23:56 +08:00
不太了解 PHP,java 你可以把这个返回值抽出一个常量,应该会快很多。
如果测试的对象是 Base64 的 decode,用循环试试。 |
6
zjsxwc OP @srx1982
@zgqq 我用 servlet 写了,跑在 Tomcat/9.0.22 上,耗时 0.259 秒,还是比 php 慢,要知道 php7 用的 server 是调试用的,上 php-fpm 会更快, $ ab -n 1000 -c 1000 "http://localhost:8080/servlet-test-1.0-SNAPSHOT/x.png" This is ApacheBench, Version 2.3 <$Revision: 1757674 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: Server Hostname: localhost Server Port: 8080 Document Path: /servlet-test-1.0-SNAPSHOT/x.png Document Length: 70 bytes Concurrency Level: 1000 Time taken for tests: 0.259 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 188000 bytes HTML transferred: 70000 bytes Requests per second: 3867.48 [#/sec] (mean) Time per request: 258.566 [ms] (mean) Time per request: 0.259 [ms] (mean, across all concurrent requests) Transfer rate: 710.05 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 3.5 0 11 Processing: 1 24 13.6 21 74 Waiting: 1 22 12.5 19 72 Total: 3 26 15.3 21 83 Percentage of the requests served within a certain time (ms) 50% 21 66% 27 75% 32 80% 36 90% 51 95% 59 98% 67 99% 71 100% 83 (longest request) 代码: import java.io.IOException; import java.io.OutputStream; import java.util.Base64; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class XServlet */ public class XServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public XServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("content-type","image/png"); String onepointpngBase64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4////fwAJ+wP9CNHoHgAAAABJRU5ErkJggg=="; OutputStream os = response.getOutputStream(); byte[] decodedValue = Base64.getDecoder().decode(onepointpngBase64); os.write(decodedValue); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } } |
7
zjsxwc OP 我收回说的这句话,java 只是在第一次跑的时候会比 php 慢,之后多次访问后会快很多
|
8
reus 2019-09-23 12:59:34 +08:00
所以就是 java 没预热……
|
9
auciou2 2019-09-23 13:03:04 +08:00 via Android
PHP 7.0 ~ 7.3 的速度差异不大。
PHP 7.4 速度约是 7.3 的 1.8 ~ 2 倍。使用 PHP 7.4 测试,会更有惊喜。 |
10
zjsxwc OP |
11
Xusually 2019-09-23 14:50:07 +08:00 1
PHP 你用的还是 7.0 如果用的是目前各大发行版仓库里默认的 7.2.22 或者换 7.3 系列估计还会有 10%-15%的提升。还在测试的 7.4 和 8 的效率就更高一些。
|
12
zjsxwc OP |
13
iminto 2019-09-23 15:26:10 +08:00
其实是 JDK 内置的 Base64 太慢了,而且基于 servlet 的模式也不快
|
14
chengyiqun 2019-09-23 15:53:37 +08:00
java 预热以后, 性能才能体现出来. 预热后变成机器码, 性能才接近 C++
-XX:CompileThreshold 这个参数了解下. |
15
richzhu 2019-09-23 15:58:16 +08:00
😱不会吧 go 这么差的嘛
|
16
iminto 2019-09-23 16:13:47 +08:00
@iminto 用 vert.x 跑 HTTP 服务性能会好很多,再用上 JODD 里的 base64。
早期的 base64 性能测试: https://www.oschina.net/code/snippet_724468_15551 |
17
wysnylc 2019-09-23 16:17:00 +08:00
java12 之前有 jit
12 有 zgc 我这个挖掘机好难开还没铲子快,大概就是你这个问题的比喻 |
18
gz911122 2019-09-23 16:18:14 +08:00
可以用 vertx 试一下...
spring 那一套调用栈都能超过 2 个屏幕...性能损耗比较大... |
19
Hanggi 2019-09-23 16:30:49 +08:00
php 和 node.js 谁更快?
反正 python 最慢。 |
20
wengjin456123 2019-09-23 16:34:53 +08:00
PHP7 以后快了很多
|
21
ben1024 2019-09-23 16:35:44 +08:00
不知 php7.4 + swoole 效果如何
|
22
qq316107934 2019-09-23 16:39:52 +08:00
别的结果看起来很合理,为什么 Golang 这么慢?
|
23
Vegetable 2019-09-23 16:44:57 +08:00
@qq316107934 试了一下,的确就是这么慢,我也很好奇...
|
24
stabc 2019-09-23 16:49:25 +08:00
PHP7 有脚本缓存吧,也就是说,段时间内大量执行同一代码,相当于在测试 C 语言的速度。
|
25
icexin 2019-09-23 16:55:10 +08:00 1
golang 慢是因为它里面的 int 在 64 位环境下是 64 位的,把其他语言换成 int64 时间就很接近了
|
26
raincode 2019-09-23 16:56:48 +08:00
nodejs 呢?
|
27
cjh1095358798 2019-09-23 16:58:13 +08:00
php 还是牛逼,js 也可以
|
29
xfriday 2019-09-23 17:04:19 +08:00 1
@icexin 确实有这个原因,golang 换成 int32,时间可以降低一半,我的 mbp 是 5.29s ,还是和 java 有点差距,js 为啥那么牛批?-_-b
|
30
xnode 2019-09-23 17:05:36 +08:00
php 的效率并不低,php 令人诟病的是 fpm 的模式的效率 以及不规范的开发模式 .换句话说 php 的天花板低
|
31
photon006 2019-09-23 17:06:04 +08:00
我测了 node.js ,v10.13.0 长期支持版,代码:
``` 'use strict'; const http = require('http'); http.createServer(function (req, res) { let data = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4////fwAJ+wP9CNHoHgAAAABJRU5ErkJggg=='; // console.time('耗时:') let buff = Buffer.from(data, 'base64'); let text = buff.toString('ascii'); // console.timeEnd('耗时:') res.writeHead(200, {'Content-type': 'image/png'}); res.write('asdfasd'); res.end(); }).listen(8080); ``` ubuntu 18.04 安装 AB: sudo apt install apache2-utils 测试代码:ab -n 1000 -c 1000 "http://localhost:8080/" 测出结果程序启动第一次:Time per request: 0.350 [ms] (mean, across all concurrent requests) 再测,维持在 0.160ms 左右 这个跟 cpu 有关吧 |
32
xfriday 2019-09-23 17:07:07 +08:00 1
看来 js (浏览器端)除了没法多线程,性能已经优化到 java 级别了
|
33
Vegetable 2019-09-23 17:08:08 +08:00
@xfriday 因为 js 也是 jit 吧,pypy3 我这里也可以达到六七秒的样子。
我这里 go1.13 是 12s,pypy 七点几。java 换成 long 是 11s 多,go 换 int32 是 7.5 左右,没降到一半,大概还有别的原因。 |
34
zjsxwc OP @iminto
我用 golang,9000 并发时可以稳定在 0.35 秒左右 我用 c++写,9000 并发时可以在 0.5 秒左右 ( https://github.com/zjsxwc/xpng-test/blob/master/src/controller/MyController.hpp#L149 ) 都是在一个数量级,差别不大 |
36
photon006 2019-09-23 17:13:07 +08:00
@xfriday 浏览器也可以用多线程,公司目前有个上传文件功能,做了大文件、批量上传、进度条、断点续传功能,但要保证文件 100%可靠,后台我用 node 异步计算 md5,客户端我打算让前端同学用 web worker 实现。
|
37
stevenhawking 2019-09-23 17:16:23 +08:00
原来是友军
|
39
keepeye 2019-09-23 17:19:35 +08:00
golang int32 效率提升 40% 禁用 gc 没有啥提升 但还是比较慢 好奇原因
|
40
qsbaq 2019-09-23 17:22:39 +08:00 1
楼猪,你有没有把 PHP 的 OPCACHE 打开?
|
41
zjsxwc OP @qsbaq #40 原文:“楼猪,你有没有把 PHP 的 OPCACHE 打开?”
回复:没开 |
42
gimp 2019-09-23 17:30:21 +08:00
我运行楼主的 node.js 代码
2871 ms 翻译成 Rust,4701ms ... (思考脸 看有的回复提到变量类型,遂把 n, i, j 从 i32 换成 u32 和 u8 类型代替后,49ms ... (思考脸 |
43
notreami 2019-09-23 17:34:15 +08:00 1
2019 年了,能活下来的,性能、周边、背书、易用都不会太差。
2019 年了,考验的是某个领域的杀手锏工具,比如 java 的大数据领域、python 的 AI 领域、golang 的运维工具领域、js 的前端领域。而 php 在最近 10 年,好像没啥特别领域突破。 |
45
cloudzhou 2019-09-23 17:38:27 +08:00 1
https://paste.ubuntu.com/p/JCRRGCCqYx/ ,修改了一点小逻辑
在我的机器里: @X220:/tmp$ java -cp . pn 第 300000 个素数的值是:4256233 耗时 4911 毫秒 @X220:/tmp$ go run /tmp//tt.go 第 300000 个素数的值是:4256233 耗时 5165 毫秒 非常接近 |
46
luozic 2019-09-23 17:41:54 +08:00
|
47
photon006 2019-09-23 17:42:56 +08:00
上面 node 代码改下,返回值固定死了,应该是这样:
``` 'use strict'; const http = require('http'); http.createServer(function (req, res) { let data = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4////fwAJ+wP9CNHoHgAAAABJRU5ErkJggg=='; // console.time('耗时:') let buff = Buffer.from(data, 'base64'); let text = buff.toString('ascii'); // console.timeEnd('耗时:') res.writeHead(200, {'Content-type': 'image/png'}); res.write('text'); res.end(); }).listen(8080); ``` 在 raspberry pi4 上运行,node 还是 10.13.0LTS 冷启动:0.6ms 重试维持在 0.430ms |
48
Rekkles 2019-09-23 17:44:35 +08:00
开 fpm + opcache 会快的你怀疑人生
|
49
Mac 2019-09-23 17:47:23 +08:00 via Android 2
opcache 不开谈什么快😂
|
50
zjsxwc OP |
51
silenceeeee 2019-09-23 17:55:30 +08:00
PHP 为啥这么慢,有没有大神解释下原因
|
53
zhuzeitou 2019-09-23 18:03:48 +08:00 6
@cloudzhou `if j > i/j {`这个分支的改动对 java 的影响微乎其微,但对 golang 影响很大
另外,在`if i%j == 0`这个分支最后加一个`continue`,会有惊喜…… https://paste.ubuntu.com/p/3X9hB4tdzc/ |
55
dif 2019-09-23 18:11:19 +08:00
现在不玩性能了,都看生态已经关键领域的。
|
56
pC0oc4EbCSsJUy4W 2019-09-23 18:13:11 +08:00
再你说得天花乱坠,我还是 java
|
57
xfriday 2019-09-23 18:13:34 +08:00
上面那个 continue 加上直接比 c 还快了,2.24s 。。。golang 的 if 没优化好?
|
58
ourleven 2019-09-23 18:22:52 +08:00 via iPhone
总结:
Js 天下第一 |
59
auciou2 2019-09-23 18:25:46 +08:00
@shansing 没有记错,5.3、5.4、5.5、5.6、7.0 ~ 7.4 我都逐个版本试过了。7.4 到 7.3 的提升很大。
|
60
zhuzeitou 2019-09-23 18:29:26 +08:00 1
@xfriday 我已经想不起来为啥我要试着加这个 continue 了
然后又折腾了一下,把判断条件反了一下,好像还能提升一点点…… https://paste.ubuntu.com/p/ByXy3gYfrW/ |
61
askfilm 2019-09-23 18:30:14 +08:00
大家聊性能好嗨啊, 然而我业务还没写完呢 ~
|
62
zjsxwc OP @notreami #43 原文:“2019 年了,能活下来的,性能、周边、背书、易用都不会太差。2019 年了,考验的是某个领域的杀手锏工具,比如 java 的大数据领域、python 的 AI 领域、golang 的运维工具领域、js 的前端领域。而 php 在最近 10 年,好像没啥特别领域突破。”
回复: php 好处在于讨好程序员领域吧,我写代码别的语言都不想用,只想写 php,因为可以无脑 php array 与 string 莽过去,array 可以当数组,可以当 map,可以当 object 用; string 可以当 char,可以当[]byte,可以当 intger,可以当 stream ; 别的语言各种类型转换写起来比较烦躁。 |
63
shansing 2019-09-23 18:38:00 +08:00
|
64
autogen 2019-09-23 18:47:18 +08:00
// 来跟 C 比一下速度?
printf("Content-type: image/png\n\n"); write(stdout, base64_decode("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4////fwAJ+wP9CNHoHgAAAABJRU5ErkJggg==")); |
65
auciou2 2019-09-23 18:50:22 +08:00 1
@shansing 是的,那个公开资料我之前看过。实际的测试数据,和那个资料是不一样的。我的测试数据,是循环 100 万次时间太短,所以循环 1000 万次。
这 2 个月在开发一键 LAMP/LNMP,顺便把这些 PHP 的性能测试了一下。本来我一直用 PHP 5.3、5.5,速度也很快。 测试结果,PHP 7.4 的执行速度约是 PHP 7.3 的 1.8 倍~ 2 倍; PHP 7.4 的执行速度约是 PHP 5.3 的 10 倍; PHP 7.4 的执行速度约是 PHP 5.5 的 5 倍多,PHP 7.0、7.1、7.2、7.3 的速度差异不大,这 4 个版本当时没有具体记录,大概最多是 20%-40%的差别。 但是,PHP 7.3 到 PHP 7.4 这样大的提升,当时我十分吃惊。所以我的项目正在转向 PHP 7.4,也正在把 PHP 5 的程序都慢慢改写为 PHP 7,已经写了 2 个月。 一个月前当时的一点测试记录: 环境为 Ubuntu、Debian+Apache,执行 1000 万次的循环程序,测试结果如: PHP 执行时间:(单位:微秒) PHP 7.4 0.045616865158081 (Ubuntu 16+PPA) PHP 7.0 0.099370956420898 (Debian 9) (PHP 7.0 ~ 7.3 变化不太大) PHP 5.3 0.52340078353882 (Ubuntu 12) PHP 5.5.9 0.25087404251099 (Ubuntu 14) 在高并发时可能会有很大的差别。PHP 的瓶颈主要是在网络线路,MySQL,或者数据库的设计。 |
66
zjsxwc OP @autogen #64 原文:“// 来跟 C 比一下速度? printf("Content-type: image/png\n\n");write(stdout, base64_decode("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4////fwAJ+wP9CNHoHgAAAABJRU5ErkJggg=="));”
回复: cgi 吗?没试过,我上面有 c++的 web 例子,不过已经可以得出总结,在 web 服务端开发领域所有语言基本都能撑满到目前 io 极限,在我的电脑里都是 0.5 秒处理完 9000 并发的。 目前也就是在 cpu 计算密集领域这些语言性能还会有要求。 |
67
auciou2 2019-09-23 19:02:06 +08:00
@shansing 总之,大家转到 PHP 7.4,会有不少惊喜。
PHP 7 有些语法和 PHP 5 不一样,比 PHP 5 严格。所以 PHP 编程者应该尽快抛弃 PHP 5 的开发,并不是因为性能的原因,因为性能只有 PHP 7.4 的 PHP 5.3,速度也很快。PHP 的瓶颈主要是网络线路。 转向 PHP 7 开发的原因是语法、巨大的工作量的原因,原来在 PHP 5 下的很多程序,到了 PHP 7 就会报错。所以一步到位写 PHP 7 的程序,可以省掉很大的工作量。PHP 5 程序改为 PHP 7,需要对所有的模块重新逐一测试,估计占到原始开发量的工作量的 10%-15%左右,工作量非常巨大。 |
68
auciou2 2019-09-23 19:02:44 +08:00
修改:因为性能只有 PHP 7.4 的 1/10 的 PHP 5.3,速度也很快。
|
69
lscho 2019-09-23 19:23:35 +08:00 via Android
不是,为什么有人觉得 php 内置函数慢?
|
70
cloudzhou 2019-09-23 19:41:10 +08:00
@zhuzeitou 还是你骚
我的优化逻辑上是通的,因为减少一次 if 判读以及求余计算 我猜测和编译器优化有关,比如进行内联等,continue 应该是直接 go to 到 for {} 入口 基本上来说,这些测评的作用是很有限的,在非常单一的计算测试中,考验的只是局部的某点优化 |
71
agdhole 2019-09-23 19:48:42 +08:00
看着快,实际上没人会直接拿来这么用
把业务堆上去,PHP 只能往后稍稍 |
72
rrfeng 2019-09-23 19:53:42 +08:00 via Android
这种测试没意义啊,你用 netty 起个 socket 直接返回字符试试,更快。
|
73
godoway 2019-09-23 20:27:29 +08:00 via Android
Java 上 vertx 试试,或者看这里现成的结果。
https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=db |
74
zhuzeitou 2019-09-23 20:32:59 +08:00
@cloudzhou 嗯,感觉和跳转的优化有关,后面改着改着以为自己在玩 Human Resource Machine……
|
75
areless 2019-09-23 20:40:46 +08:00 1
目前在编程语言上遇到瓶颈的公司是没有的。阿里、新浪、facebook 也不是因为语言性能问题换掉 PHP 的,而是大厂的阵营问题,套路,发布会,秀,娱乐圈精髓要带进来,网红文化,敏捷开发,概念化,生态化反 =___=
|
76
romisanic 2019-09-23 20:42:01 +08:00
性能测试都要预热的啊。。。。
|
77
des 2019-09-23 20:51:28 +08:00 via Android
|
78
zy445566 2019-09-23 21:05:24 +08:00 via Android
|
79
GoLand 2019-09-23 22:08:08 +08:00 1
|
80
areless 2019-09-23 22:30:44 +08:00
第 30 万个质数
PHP 用 gmp_nextprime 函数能在 10 秒内。 |
81
chocotan 2019-09-23 22:40:36 +08:00
楼主你只是证明了比 Spring Boot 快而已
|
82
2kCS5c0b0ITXE5k2 2019-09-23 22:58:59 +08:00
@areless 难道不是 php 容易被腐化吗 项目一大 人一多 遇到不规范的贼乱
|
84
340244120w 2019-09-24 00:17:21 +08:00 via Android
spring 本来性能就弱,你看看调用链有多长。。。我用过的一个非 servlet 框架,有的测试是 spring 的三十多倍
|
85
jason19659 2019-09-24 01:04:12 +08:00
这点东西能测出个啥。。
|
86
KasuganoSoras 2019-09-24 02:44:35 +08:00
测试了一下 PHP 7.3.8 + Swoole 的服务器
<?php $http = new Swoole\Http\Server("0.0.0.0", 880); $http->on('request', function ($request, $response) { $response->header("Content-type", "image/png"); $response->end(base64_decode("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4////fwAJ+wP9CNHoHgAAAABJRU5ErkJggg==")); }); $http->start(); 测试结果:0.089ms Swoole 果然还是快,吹爆 |
87
KasuganoSoras 2019-09-24 02:45:56 +08:00
@KasuganoSoras #86 是 0.084ms,写错了
|
88
az422 2019-09-24 07:03:41 +08:00 via Android 1
看了下楼主的 ab 命令,应用部署和 ab 压测在同一台机器吧?这样就容易不准了。还有楼主压测机器参数是什么?然后一般来说,单个 ab 用-c1000,-n1000 这样比例搭配不合理,会导致 ab 线程调度完请求也完成了,ab 本身没预热好。建议楼主,
1.分开机器压测(局域网内) 2.ab 参数类似-c200-n10000 这样试试 3.一般不用直接-c1000,而是通过多个 ab 命令达到 1000,比如脚本 ab -c 300 xxx. & ab -c 300 xxx. & ab -c 400 xxx wait |
89
xiaotuzi 2019-09-24 08:00:02 +08:00 via iPhone
@qsbaq 亲测,打开了 opcache 也一样,我是本地 Windows 10,cli 执行,我用 php7.3 测的,结果是 28s+,用 PHP7.0 没有开 opcache 测出结果是 23s+,我也是 PHPer,不吹不黑,可以自己测一下。
|
90
mcfog 2019-09-24 08:09:45 +08:00 via Android
未经优化 php5 都比 java 快,正常操作
上了 laravel php7.4 比裸 php5 慢,正常操作 上 spring 慢多少我没概念 合理的优化过后,什么 php5 还是 7,java 还是 python,laravel 还是 spring 全都不是瓶颈 github 还用着 RoR 呢啥时候性能有问题了 |
91
ichubei 2019-09-24 08:25:10 +08:00 via iPhone
那也无法阻挡 php 的没落……
|
93
wo642436249 2019-09-24 08:37:15 +08:00
照我的理解,java、go 之类的代码,是启动时候直接加载到内存中了,单凭这个就很快了,而 php 大多是跑在 fmp 中的,每次请求都重新拉起进程,这样很慢,如果把 php 加载内存中,比如结合 swoole,那破 java 也很容易
|
94
encro 2019-09-24 09:08:28 +08:00
PHP 最大问题在于没有线程(线程基本是废物大多用的是 nts 版本),只有进程,所以需要配合 swoole 之类,
但是用 swoole 写的代码即使再怎么优化,肯定不如我写了几天的 go。 效率是:单进程<多进程<多线程<协程 比如我们开发公司微信消息服务,做活动的时候一分钟会来几千个请求,收到请求后我们又去请求微信,由于微信相应通常要 60-200MS,这时候用 PHP 一个进程需要 20M 内存耗着,用 JAVA 一个线程也需要几十几百 K,但是 GO 最少只需要 2K。 意味着,一台 128G 内存的机器,PHP 也就跑几千并发,java/swoole 可以跑几万几百万并发,而 Go 可以单机几百万并发。 |
95
encro 2019-09-24 09:12:52 +08:00
@KasuganoSoras 你的那个结果报错了。。。
|
96
crazjieb 2019-09-24 09:17:21 +08:00
你在想 peach
|
97
saeed 2019-09-24 09:17:58 +08:00
java: 你没有用设计模式,要重新比! php: qnmd
|
98
raincode 2019-09-24 09:26:27 +08:00
有没有谁用 rust 测测,想知道结果
|
99
anyuhanfei 2019-09-24 09:38:14 +08:00
学算法的时候,用 python3 写一遍,用 php7.3 写一遍,基本上每个算法都比 python3 快一半
|