用户头像

陈思敏捷

多动脑不痴呆

2017.12.21 加入

gopher
关注
  • 16

    发布数

  • 1

    关注者

  • 0

    关注了

Go: 并发访问 Map — Part III
Go: 并发访问 Map — Part III

map 不能安全地并发使用:同时读写 map 时的行为是未知的。 如果你需要并发 goroutine 读写 map,则必须通过某种同步机制来协调访问

Go: 通过代码学习 Map 的设计 — Part II
Go: 通过代码学习 Map 的设计 — Part II

map 的内部设计向我们展示了如何针对性能以及内存管理对其进行优化。

Go: 通过例子学习 Map 的设计 — Part I
Go: 通过例子学习 Map 的设计 — Part I

Go 提供的内置类型 map 实现了一个哈希表。 在本文中,我们将探讨此哈希表不同部分的实现:桶(存储键 / 值对的结构),哈希(这些键 / 值对的索引)和负载因子(判断 map 是否应该扩容的指标)。

Go:Stringer命令,通过代码生成提高效率
Go:Stringer 命令,通过代码生成提高效率

stringer 命令旨在自动创建满足 fmt.Stringer 的方法。 它为指定类型生成 String() 并将其描述为字符串。常可用于​定义错误码时同时生成错误信息等场景。​

Go: 字符串和转换优化
Go: 字符串和转换优化

在 Go 中,将字节数组转换为字符串可能会涉及到内存分配以及转换后的字符串的副本。 但是,仅将字节转换为字符串以满足代码约束(例如 switch 语句中的比较或作为 map 的 key)绝对是浪费 CPU 时间。 让我们回顾一些案例并进行优化。

Go:gsignal,信号大师
Go:gsignal,信号大师

signal 包提供了信息处理器并允许 Go 程序与传入的信息进行交互。

Go:使用Delve和Core Dump来调试
Go: 使用 Delve 和 Core Dump 来调试

core dump(核心转储) 是包含程序内存意外终止快照的文件。它用于事后调试以了解崩溃原因和其中涉及的变量。Go 提供了环境变量 GOTRACEBACK 用于控制程序崩溃时生成的输出。 此变量还可以强制生成 core dump,从而可以进行调试。

Go: 内存管理和分配
Go: 内存管理和分配

当不再使用内存时,标准库会自动执行 Go 的内存管理即从分配到回收。尽管开发者不需要处理它,但是 Go 的底层管理进行了很好的优化并且充满了有趣的概念。

Go: Go 调度器的任务窃取(Work-Stealing)
Go: Go 调度器的任务窃取(Work-Stealing)

在 Go 中创建 goroutine 既方便又快捷。但是 go 在同一时间单核只能运行一个 goroutine, 因此需要一种方式来停放其他 goroutine 来确保处理器负载均衡。

Go: 使用GODEBUG改善Goroutine的使用
Go: 使用 GODEBUG 改善 Goroutine 的使用

goroutine 轻量的特点往往被认为是改善程序的解决方案。不幸的是,由于 goroutine 上下文切换消耗,goroutine 的不当使用反而会降低程序的性能。

Go: 应该使用指针还是结构体副本?
Go: 应该使用指针还是结构体副本?

对于许多 Go 开发人员而言,就性能而言,系统地使用指针共享结构体而不是副本本身似乎是最佳选择。

Go: Trace包探秘
Go: Trace 包探秘

Go 为我们提供了一个工具,可在运行时启用跟踪并获得程序执行的详细视图。 借助 trace 软件包,可以通过测试的标识 -trace 启用此工具,从 pprof 进行实时跟踪,或者在我们的代码中的任何地方启用此工具。

Nginx支持QUIC/HTTP3的实现路径和实践思考

Nginx支持QUIC/HTTP3的实现路径和实践思考

陈思敏捷