2.2.6 字节跳动在 Go 网络库上的实践
字节跳动在 Go 网络库上的实践 何晨 字节跳动 基础架构 – 研发 应用层 Netpoll – 面向 RPC 场景的网络库 Go net Netpoll 网络层 RPC 框架 HTTP 框架 KiteX Hertz Netpoll – 性能表现 Environment CPU: 4 cores Memory: 8GB Go: 1.15.4 Netpoll0 码力 | 42 页 | 3.19 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针
如果你没看出来(哪怕是其中一个),那就要好好上小彭老师的课哦! 字节( byte ) 和位( bit )有什么区别 • 众所周知,计算机是二进制的,存储的实际上是一个个 0 和 1 。 • 每个存储 0 或 1 的空间称为一个位( bit ),一位可以存储 0 或 1 两个可能的值。 • 现在的计算机都会把 8 个位打包成一个字节( byte ),也就是说: 1 字节 = 8 位。 • 一字节可以表示 0 到 255 区间中所有的值,表示方式如下: 11111101 表示 253 11111110 表示 254 11111111 表示 255 • 字节实际上就是 C 语言中的 unsigned char 类型。 表示更大范围的整数:字( word ) • 但是单单一个字节表示的范围还是太有限了,只能表示 0 到 255 的值。 • 如何扩大表示范围?简单,用两个字节合在一起即可,例如: • 00000000-00000000 表示 0 00000000-00000001 11111111-11111110 表示 65534 11111111-11111111 表示 65535 • 这就是两个字节合成了一个字( word ),实际上就是 C 语言里的 unsigned short 类型 。 不同位数的计算机,字( word )的大小也不一样 • 刚刚说把 2 个字节( byte )拼成一个字( word ),实际上是 16 位计算机的做法。 • 16 位计算机得名就是因为他的字由0 码力 | 128 页 | 2.95 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化
图中加法 (add) 和乘法 (mul) 都指的整数。 • 区别是浮点的乘法和加法基本是一样速度。 • L1/2/3 read 和 Main RAM read 的时间指的是 读一个缓存行( 64 字节)所花费的时间。 • 根据计算: 125/64*4≈8 • 即从主内存读取一次 float 花费 8 个 cycle , 符合小彭老师的经验公式。 • “right” 和“ wrong” 指的是分支预测是否成功。 350 funcA funcB funcC 内存信息查看工具: dmidecode • 可以看到小彭老师电脑上插了 2 块内存,频率都是 2667 MHz ,数据的宽度是 64 位( 8 字节)。 • 理论极限带宽 = 频率 * 宽度 * 数量 2667*16*2=42672 MB/s • 那么,频率相同的情况下,可以考虑插两块 8GB 的内存, 比插一块 16GB 的内存更快,不过价格可能还是翻倍的。 取到该地址的数据,就创建一个新条目。 • 在 x86 架构中每个条目的存储 64 字节的数据,这个条目 又称之为缓存行( cacheline )。 • 当访问 0x0048~0x0050 这 4 个字节时,实际会导致 0x0040~0x0080 的 64 字节数据整个被读取到缓存中。 • 这就是为什么我们喜欢把数据结构的起始地址和大小对齐到 64 字节,为的是不要浪费缓存行的存储空间。 缓存的工作机制:写0 码力 | 147 页 | 18.88 MB | 1 年前3Python 标准库参考指南 3.7.13
readline 的补全函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 7 二进制数据服务 135 7.1 struct --- 将字节串解读为打包的二进制数据 . . . . . . . . . . . . . . . . . . . . . . . . . 135 i 7.2 codecs --- 编解码器注册和相关基类 . Byte-compile Python libraries . . . . . . . . . . . . . . . . . . . . . . . . . . 1610 33.12 dis --- Python 字节码反汇编器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1613 33.13 pickletools --- 用str.encode() 方法来将 string 转变成 bytes。 • 如果是一个 integer,会初始化大小为该数字的数组,并使用 null 字节填充。 • 如果是一个符合 buffer 接口的对象,该对象的只读 buffer 会用来初始化字节数组。 • 如果是一个 iterable 可迭代对象,它的元素的范围必须是 0 <= x < 256 的整数,它会被用 作数组的初始内容。 如果没有实参,则创建大小为0 码力 | 1846 页 | 9.09 MB | 9 月前3Python 标准库参考指南 3.7.13
的补全函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 7 二进制数据服务 141 7.1 struct --- 将字节串解读为打包的二进制数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 7.2 codecs --- 编解码器注册和相关基类 Python libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1710 33.12 dis --- Python 字节码反汇编器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1714 33.13 pickletools 用str.encode() 方法来将 string 转变成 bytes。 • 如果是一个 integer,会初始化大小为该数字的数组,并使用 null 字节填充。 • 如果是一个符合 buffer 接口的对象,该对象的只读 buffer 会用来初始化字节数组。 • 如果是一个 iterable 可迭代对象,它的元素的范围必须是 0 <= x < 256 的整数,它会被用作数 组的初始内容。 6 Chapter0 码力 | 1961 页 | 9.14 MB | 9 月前3Python 标准库参考指南 3.8.20
的补全函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 7 二进制数据服务 139 i 7.1 struct --- 将字节串解读为打包的二进制数据 . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.2 codecs --- 编解码器注册和相关基类 . . . . . . . . . . . . . 1681 32.11 compileall --- 字节编译 Python 库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1682 32.12 dis --- Python 字节码反汇编器 . . . . . . . . . . . . . . . . . . . . . 会使 用str.encode() 方法来将 string 转变成 bytes。 • 如果是一个 integer,会初始化大小为该数字的数组,并使用 null 字节填充。 • 如果是一个遵循 缓冲区接口的对象,该对象的只读缓冲区将被用来初始化字节数组。 • 如果是一个 iterable 可迭代对象,它的元素的范围必须是 0 <= x < 256 的整数,它会被用 作数组的初始内容。 如果没有实参,则创建大小为0 码力 | 1927 页 | 9.69 MB | 9 月前3Python 标准库参考指南 3.8.20
的补全函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 7 二进制数据服务 139 i 7.1 struct --- 将字节串解读为打包的二进制数据 . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.2 codecs --- 编解码器注册和相关基类 . . . . . . . . . . . . . 1681 32.11 compileall --- 字节编译 Python 库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1682 32.12 dis --- Python 字节码反汇编器 . . . . . . . . . . . . . . . . . . . . . 会使 用str.encode() 方法来将 string 转变成 bytes。 • 如果是一个 integer,会初始化大小为该数字的数组,并使用 null 字节填充。 • 如果是一个遵循 缓冲区接口的对象,该对象的只读缓冲区将被用来初始化字节数组。 • 如果是一个 iterable 可迭代对象,它的元素的范围必须是 0 <= x < 256 的整数,它会被用 作数组的初始内容。 如果没有实参,则创建大小为0 码力 | 1927 页 | 9.69 MB | 9 月前3Python 标准库参考指南 3.8.20
的补全函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 7 二进制数据服务 149 7.1 struct --- 将字节串解读为打包的二进制数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 7.2 codecs --- 编解码器注册和相关基类 . . . . . . . . . . 1796 32.11 compileall --- 字节编译 Python 库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1798 32.12 dis --- Python 字节码反汇编器 . . . . . . . . . . . . . . . . . . . . 转变成 bytes。 • 如果是一个 integer,会初始化大小为该数字的数组,并使用 null 字节填充。 6 Chapter 2. 内置函数 The Python Library Reference, 发布 3.8.20 • 如果是一个遵循 缓冲区接口的对象,该对象的只读缓冲区将被用来初始化字节数组。 • 如果是一个 iterable 可迭代对象,它的元素的范围必须是 0 <= x < 2560 码力 | 2052 页 | 9.74 MB | 9 月前3Python 标准库参考指南 3.10.15
bytearray 操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.8.4 printf 风格的字节串格式化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.8.5 内存视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 7 二进制数据服务 149 7.1 struct --- 将字节串解读为打包的二进制数据 . . . . . . . . . . . . . . . . . . . . . . . . . 149 7.1.1 函数和异常 . . . . . . . . . . 簿记功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 9.6.2 用于字节数据的函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 9.6.3 整数用函数 . . .0 码力 | 2072 页 | 10.39 MB | 9 月前3Python 标准库参考指南 3.10.15
bytearray 操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4.8.4 printf 风格的字节串格式化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.8.5 内存视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 7 二进制数据服务 161 7.1 struct --- 将字节串解读为打包的二进制数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 7.1.1 函数和异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 9.6.2 用于字节数据的函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 9.6.3 整数用函数 .0 码力 | 2207 页 | 10.45 MB | 9 月前3
共 526 条
- 1
- 2
- 3
- 4
- 5
- 6
- 53