后端程序员需要知道的一些数据

常数

光速

光速约3.00×108m/s, 即每秒30w公里,每秒绕地球七圈半

  • 算网络延迟

深圳到北京距离大约为2000km,RTT延迟最少为2*2000km/300,000km=13ms

  • 和光速有关的bug

2002年提出的一个bug,电子邮件无法发送到500英里以外

2的次方表

2的次方 真实值 近似值 字节
27 128
28 256
210 1024 1 thousand 1 KB
216 65,536 64 KB
220 1,048,576 1 million 1 MB
230 1,073,741,824 1 billion 1 GB
232 4,294,967,296 4 GB
240 1,099,511,627,776 1 trillion 1 TB
  • C语言unsigned int最大值为216 -1 = 65535
  • 32位地址总线的寻址空间为 232 = 4G

延迟

在2010年,Jeff Dean在一次演讲中给出了每个程序员都应该知道的数值列表,但这些数据收集于2001年,最初发表在 Teach Yourself Programming in Ten Years。这些数据适用于粗略估算,并不是一个准确值,重要的是理解这些数字的量级差异。

- ns µs ms 速度
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns 14x L1 cache
Mutex lock/unlock 25 ns
Main memory reference 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 3,000 ns 3 µs
Send 1K bytes over 1 Gbps network 10,000 ns 10 us 100 MB/s
SSD random read 150,000 ns 150 µs ~1GB/sec SSD
Read 1 MB sequentially from memory 250,000 ns 250 µs 4 GB/s
Round trip within same datacenter 500,000 ns 500 µs
Read 1 MB sequentially from SSD* 1,000,000 ns 1 ms 1 GB/s ~1GB/sec SSD, 4X memory
Disk seek 10,000,000 ns 10 ms 20x datacenter roundtrip
Read 1 MB sequentially from disk 20,000,000 ns 20 ms 30 MB/s 80x memory, 20X SSD
Send packet CA->Netherlands->CA 150,000,000 ns 150 ms

问题

生成包含30个缩略图的结果页需要多长时间?

  • 串行读,每个缩略图256k

30 seeks * 10 ms/seek + 30 * 256K / 30 MB/s = 560 ms

  • 并行读,每个缩略图256k

10 ms/seek + 256K read / 30 MB/s = 18 ms

硬件性能的提升

随着硬件的发展,硬件的读写速度已经成倍的提升了。从2010到2020年,network,ssd和disk的速度提升明显。
如下所示:

2010 2020 性能提升倍数
Send 2k bytes over commodity network 1,000 ns ≈ 1 μs 44 ns 22
Read 1M bytes sequentially from SSD 494,000 ns ≈ 494 μs 49,0000 ns ≈ 49 μs 10
SSD random read 17,000ns ≈ 17μs 16,000 ns ≈ 16 μs 1
Disk seek 5,000,000ns ≈ 5ms 2,000,000 ns ≈ 2ms 2
Read 1M bytes sequentially from memory 30,000ns ≈ 30μs 3,000ns ≈ 3 μs 10
Read 1M bytes sequentially from disk 3,000,000ns ≈ 3ms 825,000 ns ≈ 825 μs 3

后端程序员需要知道的一些数据

网络

端口号

端口 TCP UDP 描述
20 Y FTP - 默认数据端口
21 Y FTP - 控制端口
22 Y SSH
23 Y Telnet
25 Y SMTP
53 y Y DNS
80 Y Y HTTP, QUIC
110 Y POP3
443 Y Y HTTPS

掩码

二进制 十进制
1000 0000 128
1100 0000 192
1110 0000 224
1111 0000 240
1111 1000 248
1111 1100 252
1111 1110 254
1111 1111 255

IPv4 地址分类

网络标志位 IP地址范围 私有地址范围 私有地址-CIDR
A 0 0.0.0.0 - 127.255.255.255 10.0.0.0 - 10.255.255.255 10.0.0.0/8
B 10 128.0.0.0 - 191.255.255.255 172.16.0.0 - 172.31.255.255 172.16.0.0/12
C 110 192.0.0.0 - 223.255.255.255 192.168.0.0 - 192.168.255.255 192.168.0.0/16
D 1110 224.0.0.0 - 239.255.255.255
E 1111 0 240.0.0.0 - 247.255.255.255

操作系统

上下文切换

上下文切换大概30µs的cpu开销,最佳实践方式是工作线程数等于CPU线程数,并以异步/非阻塞方式编写代码。

MTU

64 ~ 1500 byte,如果MTU设置得不合理会导致IP分片与重组,从而导致网络传输质量问题。

参考