随笔分类 - Go
摘要:目录1. 使用 runtime.NumGoroutine()2. 使用 pprof 监控3. 使用 debug 包打印堆栈4. 第三方工具关键注意事项总结 在 Go 程序中,有多种方法可以查看当前运行的 Goroutine 数量,以下是几种常见的方式: 1. 使用 runtime.NumGorout
阅读全文
摘要:目录数据拷贝次数与系统调用次数的详细解释1. 数据拷贝次数传统文件读取+网络发送流程(4次拷贝)2. 系统调用次数传统读写流程(2次系统调用)3. 零拷贝优化对比场景:将文件内容发送到网络(1) 传统方式(4次拷贝,2+次系统调用)(2) io.Copy优化(2次拷贝,1次系统调用)(3) send
阅读全文
摘要:目录高性能 Goroutine 池实现关键设计点详解1. 并发控制机制2. 任务队列设计3. 优雅关闭实现4. 防泄漏保障5. 超时控制扩展建议增加扩展功能增强版高性能 Goroutine 池实现实现的4个扩展功能详解1. 任务结果收集2. 动态扩缩容3. 错误处理增强4. 性能监控关键设计决策 高
阅读全文
摘要:目录1. 零内存占用2. 用途3. 唯一性4. 对比其他“零值”示例代码总结 在 Go 语言中,struct{}{} 确实是一个特殊的值,它具有以下特点: 1. 零内存占用 它是空结构体 struct{} 的实例,而空结构体不占用任何内存空间(0 字节)。 这是因为空结构体没有任何字段需要存储。 2
阅读全文
摘要:目录1. 系统资源限制1.1 文件描述符(FD)1.2 进程/线程数2. 网络层优化2.1 TCP 队列2.2 端口范围2.3 连接跟踪(Conntrack)3. 服务器应用层优化3.1 Go 代码关键配置3.2 避免阻塞操作4. 客户端优化4.1 控制并发量4.2 连接复用5. 监控与排查工具5.
阅读全文
摘要:目录问题原因解决方案1. 增大 TCP SYN 队列和 Accept 队列2. 检查 SYN 队列是否溢出3. 优化服务器 Accept 性能4. 检查服务器资源限制5. 客户端优化总结 $ netstat -s | grep -i "listen" 6006609 times the listen
阅读全文
摘要:目录1、详细解释golang的GMP调度模型,包括G、M、P的关系及调度过程Golang 的 GMP 调度模型详解1. GMP 核心组件(1) G(Goroutine)(2) M(Machine,OS 线程)(3) P(Processor,逻辑处理器)2. GMP 调度关系3. 调度过程(1) Go
阅读全文
摘要:目录1. 创建 goroutine2. goroutine 的生命周期3. 管理 goroutine 的生命周期3.1 使用 sync.WaitGroup 等待 goroutine 完成3.2 使用 context 控制 goroutine 的取消3.3 使用 channel 控制 goroutin
阅读全文
摘要:目录1. Wire 是什么?2. 为什么需要 Wire?3. Wire 的使用场景4. 举个例子没有 Wire 的情况:使用 Wire 的情况:5. 总结 1. Wire 是什么? Wire 是一个帮助你在 Go 项目中管理“依赖关系”的工具。 依赖关系:比如你的代码需要用到数据库连接、配置文件、日
阅读全文
摘要:目录202503201. 使用goroutine处理连接2. 调整系统资源限制3. 使用连接池4. 优化goroutine5. 使用高效的I/O多路复用6. 监控和调试7. 负载均衡8. 使用长连接9. 优化代码10. 测试和压测202503211. 合理使用 Goroutine2. 优化 I/O
阅读全文
摘要:在 Linux 环境下,当 Go 程序崩溃时,默认会将崩溃信息(如堆栈跟踪、错误信息等)打印到标准错误输出(stderr)。为了将这些崩溃信息保存到文件中,可以通过以下几种方式实现: 方法 1:重定向标准错误输出到文件 在运行 Go 程序时,可以通过重定向标准错误输出(stderr)将崩溃信息保存到
阅读全文
摘要:目录1. Runtime库的作用2. Runtime库的核心组件(1)Goroutine调度器(Scheduler)(2)内存管理(3)网络I/O与系统调用(4)类型系统与反射(5)异常处理3. Runtime库的工作机制(1)程序启动(2)Goroutine调度(3)垃圾回收(4)程序退出4. R
阅读全文
摘要:目录1. Goroutine是轻量级线程(1)资源占用少(2)创建和切换开销低(3)与线程的关系2. Goroutine由Go运行时管理(1)Goroutine的创建(2)Goroutine的调度(3)Goroutine的销毁(4)Goroutine的协作式调度3. Goroutine的优势4. 总
阅读全文
摘要:目录1. Goroutine与Channel的基本概念2. 通过Channel传递数据3. Channel的并发安全性4. 内存安全的注意事项5. 最佳实践6. 总结 Go语言以其简洁高效的并发模型而闻名,其核心是通过goroutine和channel实现并发编程。Go语言的设计哲学是“通过通信来共
阅读全文
摘要:目录中间件的核心特点中间件的常见应用场景中间件的工作原理以 HTTP 请求为例:中间件的代码示例代码解释:中间件的优点总结 中间件(Middleware) 是一种软件设计模式,通常用于在应用程序的请求处理流程中插入额外的逻辑。它位于客户端和服务器端之间,或者位于应用程序的不同组件之间,用于处理一些通
阅读全文
摘要:目录示例代码代码解释总结 示例代码 package main import ( "fmt" "strings" ) // 定义一个函数类型,表示中间件 type Middleware func(string) string // 中间件 1:将字符串转换为大写 func toUpperMiddlew
阅读全文
摘要:目录1. Goroutine2. Channel3. Select 语句4. 关闭 Channel5. 示例:并发计算6. 总结 在Go语言中,CSP(Communicating Sequential Processes)并发模型是通过goroutine和channel来实现的。CSP模型强调通过通
阅读全文
摘要:目录1. 线程(OS Thread)发生 OOM2. Goroutine 发生 OOM3. OOM 的典型场景与解决经验4. 实战对比示例总结 在 Go 语言中,线程(内核线程)和 Goroutine(协程)的内存管理机制存在显著差异,因此发生 OOM(Out Of Memory,内存溢出)时的影响
阅读全文
摘要:目录1. _Grunnable(可运行状态)2. _Grunning(运行中状态)3. _Gsyscall(系统调用状态)4. _Gwaiting(等待/阻塞状态)5. _Gdead(终止状态) Go 语言 GMP 模型中的 Goroutine 状态反映了其在调度过程中的不同阶段。以下是各状态的详细
阅读全文

浙公网安备 33010602011771号