• 内存管理的栈和堆(结合内存逃逸一起看)

    一、栈(Stack)1. 定义与特点• 栈是线程私有的内存区域,每个函数调用时会在栈上分配一块独立的内存空间(称为“栈帧”),存储函数的参数、局部变量和返回地址。• 自动管理:栈内存的分配和释放由编译器自动完成,遵循后进先出(LIFO)的顺序,函数执...
  • go的内存逃逸,为什么逃逸,怎么避免

    在 Go 语言中,“内存逃逸”指的是本来可以分配在栈上的变量,由于它的引用超出了局部作用域(或者编译器认为有这种风险),而被分配到了堆上,从而增加了 GC 的负担和内存分配开销。 为什么会发生内存逃逸? 返回局部变量的指针如果一个函数返回局部变量的...
  • 饥饿模式

    并发原语http://laiyong.wang/2024/06/24/concurrentPrimitive/ 一、饥饿模式的设计背景1. 问题场景1234567891011121314151617181920// 假设存在大量高频的锁竞争func ...
  • 为什么要有GMP调度解决了什么问题、如何实现协程并发,抢占式调度解决了什么问题

    一、传统线程模型的痛点• 线程创建成本高(默认栈MB级别)• 线程切换需要内核态切换(微秒级)• 难以支撑百万级并发 二、GMP 模型解决方案核心组件1234567891011121314151617// Go runtime 关键结构(简化版)ty...
  • map的并发问题

    问题map在扩容时有并发问题(map扩容时)A协程在桶中读数据时,B协程驱逐了这个桶,A协程会找不到数据,或者读到错误数据 解决方案给map加锁使用sync.map(使用了两个map,分离了扩容问题,查改使用read,新增使用dirty) sync....
  • nil,空接口,空结构体有什么区别

    我的总结nil是空,并不一定是空指针nil是六种类型的零值每种类型的nil是不同的,不能比较 空结构体 是go中特殊的类型空结构体的值不是nill指针也不是nill,但是都是相同(zerobase) 空接口空接口的值也不一定是nil类型为nil,值为...
  • kratos打印sql日志

    开启debug即可 代码里可以这样写 1234DB := repo.data.Db.Debug()querySql := DB.DistributeCustom.Query().Where(where...)querySql.Offset(int((...
  • kratos学习记录

    文档: https://go-kratos.dev/docs/getting-started/start视频: https://www.bilibili.com/video/BV1t3411h7uA 从0到1写一个接口:从表里查数据并返回ent 生成...
  • mac 使用 chrome 无视证书错误及禁用 CORS

    本地开发,项目需要 https 且前后端分离,前端通过 strict-origin-when-cross-origin 策略来接口,这样打开浏览器即可1/Applications/Google\ Chrome.app/Contents/MacOS/G...
  • mongodb的副本集部署和分片集群部署

    MongoDB 提供了两种主要的高可用和扩展机制:副本集(Replica Set)和分片(Sharding)。下面分别介绍这两种机制的部署方法。 副本集部署副本集是 MongoDB 提供的一种高可用性机制,通过在多个服务器上复制数据,确保数据的冗余和...
/12