仁扬 - 2019年6月
type: channel
link: https://imlht.com/2019/06/
description: 骐骥一跃，不能十步；驽马十驾，功在不舍。
items: 巧用 bc 命令测试 Linux 主机的 CPU 性能
items: Go 语言 for-range 的两个坑，你踩过吗？

巧用 bc 命令测试 Linux 主机的 CPU 性能
type: item
date: 2019-06-27T19:44:00+08:00
description: 今天向公司申请了一台 Linux 主机，作为平时的开发环境。由于自己并不依赖远程开发（大多数情况下项目都可以本地开发、调试），于是只申请了 4C/8G 的低配机器。突然好奇的是，这台机器的性能怎么样？磁盘就不测试了，IO 应该和生产环境差不多。先看看 CPU 的信息：cat /proc/cpuinfoprocessor : 0 vendor_id : GenuineIntel cpu family : 6 model : 45 model name : Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz stepping : 7 microcode : 0x71a cpu MHz : 1999.999 cache size : 20480 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm ssbd ibrs ibpb stibp tsc_adjust arat md_clear spec_ctrl intel_stibp flush_l1d arch_capabilities bogomips : 3999.99 clflush size : 64 cache_alignment : 64 address sizes : 45 bits physical, 48 bits virtual power management:E5-2650，2012 年 Q1 生产的，已经是很旧的机器了。Linux 系统中，bc 命令是一个任意精度的计算器，如果用它计算圆周率，我们可以大概估算出 CPU 的浮点运算性能：time echo "scale = 5000; 4 * a(1)" | bc -l -q其中：time 用来计算执行时间；scale = 5000，表示精度为 5000，也就是计算圆周率小数点后的 5000 位；4 * a(1)，这个用来计算圆周率，1 的反正切是 π / 4；-l 定义使用的标准数学库；-q 不打印正常的 GNU bc 环境信息。执行结果如下：real 0m23.992s user 0m23.983s sys 0m0.003s找了台苹果笔记本 Air，i5 的 CPU，耗时 20s，说明我电脑的单核性能比 Linux 的机器还快了一点。不过，这个方法只适合粗略估算，如果要求精确，需要安装专业的性能测试套件。

Go 语言 for-range 的两个坑，你踩过吗？
type: item
date: 2019-06-16T00:05:00+08:00
description: 坑一：迭代时协程引用索引和值先看看下面的例子，你知道最终输出的结果是什么吗？package main import ( "fmt" "time" ) func main() { var m = []int{1, 3, 5} for i, v := range m { go func() { fmt.Println(i, v) }() } time.Sleep(time.Second) } [...]