johncming / go-spec

my wiki
Apache License 2.0
0 stars 0 forks source link

百万 Go TCP 连接的思考3: 正常连接下的吞吐率和延迟 #117

Open johncming opened 5 years ago

johncming commented 5 years ago

百万 Go TCP 连接的思考3: 正常连接下的吞吐率和延迟 | 鸟窝

johncming commented 5 years ago

模拟I/O密集型的服务基本原理

我们通过time.Sleep让goroutine休眠来模拟I/O密集型的服务,实际goroutine休眠和真正的I/O密集型的服务还是有区别的,虽然它们都有一定的耗时,goroutine在等待的过程中会休眠,但是I/O密集型还有大量的I/O访问,比如磁盘、网络等等。出于方便测试的目的,我们还是使用time.Sleep来模拟,主要测试goroutine在休眠一段时间后对性能的影响。

模拟计算密集型基本原理

计算密集型的访问我们采用挖矿算法,通过计算hash值,满足一定的挖矿难度让CPU进行大量的计算动作。

johncming commented 5 years ago

连接数

连接数分别是5000、2000、1000、500、200和100

johncming commented 5 years ago

目标对比两种服务

johncming commented 5 years ago

对比场景

  1. IO密集、无阻塞
  2. IO密集、有阻塞
  3. 计算密集

结论

goroutine的方式更好