go 语言性能

2018-03-22 11:47:34 +08:00
 miniliuke

为什么我写了一个死循环,结果在 windows 下 cpu 利用率只有 7%......

4497 次点击
所在节点    Go 编程语言
45 条回复
miniliuke
2018-03-22 13:20:12 +08:00
@weizhen199 我看了一下没有一个核超过 20
iceheart
2018-03-22 13:39:43 +08:00
8 核 16 线程的 cpu 吧
jccg90
2018-03-22 13:44:20 +08:00
什么都没有的空循环,编译器会给优化吧。写个算哈希值的挖矿算法的循环试试吧。
xdeng
2018-03-22 13:46:04 +08:00
你这 CPU 是 6 核 12 线程的吧 ? 8700 ?
LJ2010
2018-03-22 13:49:31 +08:00
https://benchmarksgame.alioth.debian.org/ 个人认为测试的还是比较全面
LJ2010
2018-03-22 13:52:58 +08:00
前三位基本上 C,C++,Rust
misaka19000
2018-03-22 13:55:01 +08:00
你的死循环只会在一个核上执行,因为 Windows 的 CPU 监测是针对所有的 CPU,在多核情况下 Windows 单核跑满也不会导致 CPU 使用率 100%的
miniliuke
2018-03-22 14:00:00 +08:00
@iceheart 好像是的:)但是一个核都没跑满,感觉有点奇怪
misaka19000
2018-03-22 14:02:25 +08:00
我刚刚在 Mac 上面试了下死循环是能导致 100%的 CPU 使用率的

https://imgur.com/fBkIjib
https://imgur.com/O9CUCNV
goofcc
2018-03-22 14:28:43 +08:00
简单点说,5 台 java 服务器,1 台 go 服务器搞定。
KIDJourney
2018-03-22 14:45:36 +08:00
@misaka19000 对,我也是在 mac 上测试的,
miniliuke
2018-03-22 14:53:21 +08:00
@goofcc 不至于这么夸张吧
rockyou12
2018-03-22 15:01:42 +08:00
@miniliuke 至少内存上是这样,我遇到过同样功能内存差 20 倍
miniliuke
2018-03-22 15:04:56 +08:00
@rockyou12 的确 go 内存用的是真少,不涉及 io 的话,感觉性能与 c 相当(自我感觉)
RubyJack
2018-03-22 15:19:39 +08:00
大多数情况下,java 除非已经 jit 了,才可能和 go 差不多
miniliuke
2018-03-22 15:25:07 +08:00
@RubyJack 毕竟机器码,但是我看 benchmark 里有些算法 go 消耗的时间比 java 长,而且长不少,不知道为什么
misaka19000
2018-03-22 15:25:29 +08:00
任何一门语言都是能导致 CPU 100%的,事实上以下 Python 将导致 CPU 100%
```python
while 1:
i = 0
```
因为没有任何 IO 操作的程序将会一直使用 CPU 而不阻塞。
是否能够让 CPU100%不是判断一门语言是否高效的正确方法,判断一门语言是否高效可以使用以下两方面来判断:
1. CPU 的使用是否高效
2. 内存使用是否高效

Go 语言因为没有虚拟机,所以同等数量的指令相较于 Java 和 Python 可以做更多的事情,同样是因为虚拟机的存在,所以 Java 在运行时要占用更多的内存。
除此之外,对于网络 IO 密集型程序,Go 提供了协程这个解决方案,这也是 Go 语言性能优秀的一部分。对于目前很多的应用而言,其主要瓶颈在于 IO,Go 语言解决了这方面的问题。
miniliuke
2018-03-22 16:02:57 +08:00
@misaka19000 受教了,但是 python 理论上好像不能 100%,具体忘记了......其他语言理论上应该可以达到
0x8C
2018-03-22 16:25:15 +08:00
你是想问为啥你的代码不能把 cpu 跑满吧?
novacn
2018-03-22 18:13:42 +08:00
顶 37, 语言性能的好坏是指同样软硬件资源下,对资源的使用效率, 假设 java 能单位时间处理 100 个请求,而 c 能处理 200, 可以说 c 更高效一点。 cpu 啥语言都能跑满的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/440364

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX